0

In my data I have found many examples like the following. If you search Google for "Cheyney University PA", you get the following information:

Address: 1837 University Cir, Cheyney, PA 19319
Phone: (610) 399-2000

However, when doing a search using the following:

my $pid_url = Mojo::URL->new('https://maps.googleapis.com/maps/api/place/textsearch/json');
$pid_url->query({query => $query, key => 'removed'});

my $place_id = $ua->get($pid_url)->res->json->{results}->[0]->{place_id};

# Query = https://maps.googleapis.com/maps/api/place/textsearch/json?query=Cheyney+University+PA&key=removed
# Place ID returned = ChIJ5wiPkSvuxokR2rwaVUTMwks

$deets_url = Mojo::URL->new('https://maps.googleapis.com/maps/api/place/details/json');
$deets_url->query({placeid => $place_id, key => 'removed'});
say $ua->get($deets_url)->res->body;

I get the following back from Google:

{
   "result" : {
      "address_components" : [
         {
            "long_name" : "Cheyney",
            "short_name" : "Cheyney",
            "types" : [ "locality", "political" ]
         },
         {
            "long_name" : "Thornbury",
            "short_name" : "Thornbury",
            "types" : [ "administrative_area_level_3", "political" ]
         },
         {
            "long_name" : "Delaware County",
            "short_name" : "Delaware County",
            "types" : [ "administrative_area_level_2", "political" ]
         },
         {
            "long_name" : "Pennsylvania",
            "short_name" : "PA",
            "types" : [ "administrative_area_level_1", "political" ]
         },
         {
            "long_name" : "United States",
            "short_name" : "US",
            "types" : [ "country", "political" ]
         }
      ],
      "formatted_address" : "Cheyney, PA, USA",
      "name" : "Cheyney",
      "place_id" : "ChIJ5wiPkSvuxokR2rwaVUTMwks",
      "scope" : "GOOGLE",
      "types" : [ "locality", "political" ],
      "url" : "https://maps.google.com/maps/place?q=Cheyney,+PA,+USA&ftid=0x89c6ee2b918f08e7:0x4bc2cc44551abcda",
      "vicinity" : "Cheyney"
   },
   "status" : "OK"
}

(I removed some of the output for clarity.) Notice that in the results the street address components are missing (1837 University Cir), as well as the phone number. I have found many instances like this, and I am trying to figure out why my queries are not returning the same results as what I get when I Google the information.

Here's another example:

Google Results:

Address: 1320 S Dixie Hwy, Coral Gables, FL 33124
Phone: (305) 284-2211

Places API Results:

{
   "html_attributions" : [],
   "results" : [
      {
         "formatted_address" : "University of Miami, Coral Gables, FL 33146, USA",
         "geometry" : {
            "location" : {
               "lat" : 25.7216374,
               "lng" : -80.2792843
            },
            "viewport" : {
               "northeast" : {
                  "lat" : 25.7316894,
                  "lng" : -80.26327689999999
               },
               "southwest" : {
                  "lat" : 25.7115846,
                  "lng" : -80.29529169999999
               }
            }
         },
         "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png",
         "id" : "7eb529034293a6eb760e990e034a4314d83edcf7",
         "name" : "University of Miami",
         "place_id" : "ChIJn9K4n_C32YgRqR37uAXB5IM",
         "reference" : "CqQBnAAAACffq3Xp3JUFowUDlEsge90htrhAoUES9tGmsB919iNQCxgldtq4khP4f_gCAju90qGY1IEUH52hZl_GP_H6xJC5z22EceCfprWEHFhhXKsW23Y9EeV24svXC-PRYnOyQaXZmbQFCeUlsmKWB6570e-8W_w31muZKwFd4hVPdeeqO45zH2zp7CAuSrHjBr0bSiOQufEB59ibxG4QcuwenSASEHvq1xMcCCtMUsFcyLYsrOIaFN0vg6S680hJay1jDSrZ686Mt9Gn",
         "types" : [ "sublocality_level_1", "sublocality", "political" ]
      }
   ],
   "status" : "OK"
}

{
   "html_attributions" : [],
   "result" : {
      "address_components" : [
         {
            "long_name" : "University of Miami",
            "short_name" : "University of Miami",
            "types" : [ "sublocality_level_1", "sublocality", "political" ]
         },
         {
            "long_name" : "Coral Gables",
            "short_name" : "Coral Gables",
            "types" : [ "locality", "political" ]
         },
         {
            "long_name" : "Miami-Dade County",
            "short_name" : "Miami-Dade County",
            "types" : [ "administrative_area_level_2", "political" ]
         },
         {
            "long_name" : "Florida",
            "short_name" : "FL",
            "types" : [ "administrative_area_level_1", "political" ]
         },
         {
            "long_name" : "United States",
            "short_name" : "US",
            "types" : [ "country", "political" ]
         },
         {
            "long_name" : "33146",
            "short_name" : "33146",
            "types" : [ "postal_code" ]
         }
      ],
      "adr_address" : "University of Miami, \u003cspan class=\"locality\"\u003eCoral Gables\u003c/span\u003e, \u003cspan class=\"region\"\u003eFL\u003c/span\u003e \u003cspan class=\"postal-code\"\u003e33146\u003c/span\u003e, \u003cspan class=\"country-name\"\u003eUSA\u003c/span\u003e",
      "formatted_address" : "University of Miami, Coral Gables, FL 33146, USA",
      "geometry" : {
         "location" : {
            "lat" : 25.7216374,
            "lng" : -80.2792843
         },
         "viewport" : {
            "northeast" : {
               "lat" : 25.7316894,
               "lng" : -80.26327689999999
            },
            "southwest" : {
               "lat" : 25.7115846,
               "lng" : -80.29529169999999
            }
         }
      },
      "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png",
      "id" : "7eb529034293a6eb760e990e034a4314d83edcf7",
      "name" : "University of Miami",
      "place_id" : "ChIJn9K4n_C32YgRqR37uAXB5IM",
      "reference" : "CqQBlAAAAFeKC7LbGqAr7-LnBXMqbMIhuyuUh22XBMRO11hADojDclomC-InGocKSStmZ8S-S1UVWC1qHAsZi3XSp7PiDOFBgZVMqhm5kr87CfEAJmPdwsmZ6VEg5FxXh5LZmSSZdFgH0UR0OVGLL5M17SmWZp4W3Die8UNa5yCMyV5CP0T0VWmvqCb54qJR6mlyIx1itiLzRp1XhTs8_UmEt9pjIkYSEGrAqS6TWo2G1WBOrDO0YSAaFO4FfqvmFabJLia36vKL0XTz23Mu",
      "scope" : "GOOGLE",
      "types" : [ "sublocality_level_1", "sublocality", "political" ],
      "url" : "https://maps.google.com/maps/place?q=University+of+Miami,+Coral+Gables,+FL+33146,+USA&ftid=0x88d9b7f09fb8d29f:0x83e4c105b8fb1da9",
      "vicinity" : "University of Miami"
   },
   "status" : "OK"
}
Franz Kafka
  • 780
  • 2
  • 13
  • 34

1 Answers1

1

It looks like you are wanting to use Google Maps to do some sort of address validation and parsing. The short story is, unfortunately Google Maps cannot be replied upon to return parsed address components consistently. What Google Maps does do really well is geocode - that is translate input into lat/long to be displayed on a map. You could perhaps try reverse geocoding (i.e. giving Google lat/long) to see what that returns, but I'm pretty sure you will get similar results.

I have also wanted and tried in vain to use Google Maps similarly in the past myself. After much testing against various international, real world datasets, I concluded that Google couldn't be used for validation any more than (a) getting lat/long (b) a general yes/no that address sort of looks ok. I have also tried some other Geocoding providers and later settled on GeocodeFarm when Google proved too expensive once my sites outgrew what they previously provided for free. My general conclusion was the same though - I had to stick to fairly traditional address data entry forms without 'fullproof' validation, otherwise users would be told addresses were faulty that were actually valid. GeocodeFarm did "pretty print" localized addresses quite well though (i.e. almost suitable for putting as a mailing label on an envelope), but it wasn't parsed into components for storage into a typical relational database schema.

Doing some more research to verify my own experiences, I found this and this to be useful. These links also point towards a service called 'SmartyStreets' - I cannot vouch for it however, and have zero experience with it.

Hope that helps!

Community
  • 1
  • 1
TeamTam
  • 1,598
  • 11
  • 15
  • No, that doesn't really answer my question. My question is, why is the query to their API yield different results than the exact same query to Google Maps in the browser? – Franz Kafka Oct 28 '14 at 07:05
  • Ah that's what you were asking. http://stackoverflow.com/questions/10567487/google-maps-web-site-and-api-different-results – TeamTam Oct 28 '14 at 11:43
  • Man, a duplicate question! Can I still reward you the bounty if I delete the question? What you linked to does answer the Q. – Franz Kafka Oct 31 '14 at 08:32
  • Easy to do. Ha I don't know about the bounty but I hope so, I am new to SO contributions and could do with the rep, and seems like a waste if you have already paid for it! It's non-refundable from what I read. – TeamTam Oct 31 '14 at 11:45