0

Hi All,

I have an API key for google maps and its giving me the following response.

My first question is, how can i extract the data? Normally i work with XML responses via CURL so im new to this.

If i do use the XML example i just get access denied

{
  "name": "1600 Amphitheatre Parkway, Mountain View, CA",
  "Status": {
    "code": 200,
    "request": "geocode"
  },
  "Placemark": [ {
    "id": "p1",
    "address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
    "AddressDetails": {
   "Accuracy" : 8,
   "Country" : {
      "AdministrativeArea" : {
         "AdministrativeAreaName" : "CA",
         "SubAdministrativeArea" : {
            "Locality" : {
               "LocalityName" : "Mountain View",
               "PostalCode" : {
                  "PostalCodeNumber" : "94043"
               },
               "Thoroughfare" : {
                  "ThoroughfareName" : "1600 Amphitheatre Pkwy"
               }
            },
            "SubAdministrativeAreaName" : "Santa Clara"
         }
      },
      "CountryName" : "USA",
      "CountryNameCode" : "US"
   }
},
    "ExtendedData": {
      "LatLonBox": {
        "north": 37.4251466,
        "south": 37.4188514,
        "east": -122.0811574,
        "west": -122.0874526
      }
    },
    "Point": {
      "coordinates": [ -122.0850990, 37.4227820, 0 ]
    }
  } ]
}
2
Contributors
21
Replies
23
Views
7 Years
Discussion Span
Last Post by whiteyoh
0
function get_lat_long($postcode) {
        #change to your local domain i.e. .com
	$domain = "co.uk";

	$url = "http://maps.google." . $domain . "/maps/geo?q=" . urlencode($postcode) . "&output=json&key=".maps_key;

	$curl = new curl();
	$json = $curl->get_page(array("url"=>$url));

	$store_data = json_decode(str_replace(""","\"",htmlentities($json))); //Take care of accents

	$lng = $store_data->Placemark[0]->Point->coordinates[0];
	$lat = $store_data->Placemark[0]->Point->coordinates[1];

	//Return
	if($lng && $lat) {
		return array('lat'=>$lat,
		'lng'=>$lng
		);

	} else {

		return false;

	}

}

#this extracts the lat and long from the bottom - to call it use  this command:

$coords = get_lat_long('CA 94043');

#retults are returned like so

$coords['lat']; //latitude
$coords['lng']; // longtitude

Edited by liamfriel: n/a

0

Hi,

thanks for the response

I tried it out first time, the page gives a blank response, and ive echod out every line. im sure ill figure it out.

I noticed your using CURL to process the page. I usually use curl to process soap responses. What sort of response is this?

0

json (JavaScript Object Notation), have you put your key in where is says maps_key? sign up for both a maps key and an ajax key - they are identical for the site, just to be safe.

0

ok i will do that now.

I dont suppose you know how to get an xml key?

0

this is the code that returns white.

<?php
function get_lat_long($postcode) {
        #change to your local domain i.e. .com
echo	$domain = "co.uk";
echo "domain<br><br>";
echo	$maps_key = "the key";
echo "maps key<br><br>";
echo	$url = "http://maps.google." . $domain . "/maps/geo?q=" . urlencode($postcode) . "&output=json&key=". $maps_key;
echo "url<br><br>";
echo	$curl = new curl();
echo "curl<br><br>";
echo	$json = $curl->get_page(array("url"=>$url));
echo "json<br><br>";
echo	$store_data = json_decode(str_replace("&quot;","\"",htmlentities($json))); //Take care of accents
echo "store data<br><br>";
echo	$lng = $store_data->Placemark[0]->Point->coordinates[0];
echo "$lng<br><br>";
echo	$lat = $store_data->Placemark[0]->Point->coordinates[1];

	//Return
	if($lng && $lat) {
		return array('lat'=>$lat,
		'lng'=>$lng
		);

	} else {

		return false;

	}

}

#this extracts the lat and long from the bottom - to call it use  this command:
echo "lat<br><br>";
echo $coords = get_lat_long('NE1 1AA');
echo "postcode<br><br>";
#retults are returned like so

echo $coords['lat']; //latitude
echo $coords['lng']; // longtitude
?>

Edited by whiteyoh: n/a

0

sorry for the confusion - the maps_key is supposed to be the api key, there is only the api key and the ajax key.

I didnt write this function but it works for me and UK postcode geocoding.

0

ok, thanks for your help. Im sure it will be my fault, ill have a play and see whats different and let you know.

Regards

Paul

0

hi,

ive had a play around with this and its not liking anything beyond line 8.
It just seems to stop.

Could you please check this against the code that you are using?

0

this is quite wierd.

the raw url gives a response, but it also gives xml if i change the output parameter to xml.

Now ive done a lot of coding with XML, CURL and SOAP, but CURL will simple not parse this response, not will your JSON.

Im continuing to investigate

0

Thats exactly what ive been doing. ive even changed the output type to xml and got a raw url response, but the output is blank.

Take the following code, using curl to process the request. The raw url gives a response but runnung the code gives nothing (i know ive not gone into parsing the xml)

<?php

//the raw url
//http://maps.google.co.uk/maps/geo?q=NE1 1AA&output=xml&key=ABQIAAAAVHrPYH_Sk6LVCesA5cvrhSBDl4JnyGZq3II_C_YS5ykoCjTcBRI61RIZRv6SGWAhpvhTZdb-6YsXQ
$url = 'http://maps.google.co.uk/maps/geo?';
$postdata 'q=NE1 1AA&output=xml&key=ABQIAAAAVHrPYH_Sk6LVCesA5cvrhSBDl4JnyGZq3II_C_YS5ykoCjTcBRI61RIZRv6SGWAhpvhTZdb-6YsXQ';
$result = request($url, $postdata);
?>

<?php 
function request($url, $postdata) {
$curl = curl_init();
   curl_setopt($curl, CURLOPT_URL, $url);
   curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
   curl_setopt($curl, CURLOPT_POST, 1);
   curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
   curl_setopt($curl, CURLOPT_HEADER, 0);
   curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
   $result = curl_exec($curl);
   curl_close($curl);
   return $result; 
}
?>
0

progress

{ "name": "0.000000,0.000000", "Status": { "code": 400, "request": "geocode" } }

0
#http://maps.google.co.uk/maps/geo?q=NE1%201AA&output=json&key=ABQIAAAAVHrPYH_Sk6LVCesA5cvrhSBDl4JnyGZq3II_C_YS5ykoCjTcBRI61RIZRv6SGWAhpvhTZdb-6YsXQ

{
  "name": "NE1 1AA",
  "Status": {
    "code": 200,
    "request": "geocode"
  },
  "Placemark": [ {
    "id": "p1",
    "address": "Newcastle Upon Tyne NE1 1, UK",
    "AddressDetails": {
   "Accuracy" : 5,
   "Country" : {
      "AdministrativeArea" : {
         "AdministrativeAreaName" : "Newcastle Upon Tyne",
         "SubAdministrativeArea" : {
            "Locality" : {
               "LocalityName" : "Newcastle Upon Tyne",
               "PostalCode" : {
                  "PostalCodeNumber" : "NE1 1"
               }
            },
            "SubAdministrativeAreaName" : "Newcastle Upon Tyne"
         }
      },
      "CountryName" : "UK",
      "CountryNameCode" : "GB"
   }
},
    "ExtendedData": {
      "LatLonBox": {
        "north": 54.9734515,
        "south": 54.9626769,
        "east": -1.6062257,
        "west": -1.6221915
      }
    },
    "Point": {
      "coordinates": [ -1.6135470, 54.9694353, 0 ]
    }
  } ]
}

I really dont see how you can have a problem with the json output? confusing indeed. cURL can take a JSON response I do it nearly several thousand times a day. There is either something wrong with the request URL or we are missing something from the parser code.

0

i left out my cURL class sorry:

class curl {

	/**
	* COnstructor
	*/
	function curl() {



	}

	function init_curl($ch,$url,$postfields=null,$follow=null,$cookie=null,$referer=null) {

		// Set url
		curl_setopt($ch, CURLOPT_URL, $url);

		// Enable Post
		if($postfields) {
			curl_setopt ($ch, CURLOPT_POST, 1);
			curl_setopt ($ch, CURLOPT_POSTFIELDS, $postfields);
		}

		if($follow) {
			curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1 );
		}

		if($referer) {
			curl_setopt($ch, CURLOPT_REFERER, $referer);
		}

		//Enable SSL
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);


		curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');

		//Return results as string
		curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

		return $ch;

	} // end function


	/*
	Grabs a page
	*/

	function get_page($options) {

		//Set options
		foreach($options AS $key=>$value) {
			$$key = $value;
		}

		$ch = curl_init();
		$ch = $this->init_curl($ch,$url);
		$page = curl_exec($ch);
		curl_close($ch);
		return $page;


	}


} // end class
0

That is the exact same response i got. Really strange. Im wondering if its something to do with a setting on your server perhaps?

json
json support enabled
json version 1.2.1

thats my phpinfo on it

0

bingo! thanks for your help. very much appreciated

Sorry for the confusion - currently working makes a little hard to keep everything in mind. Rep me up please :D

0

oh, just thought of 1 more question.

i want to extract more info from the data so i followed the syntax of

$lat = $store_data->Placemark[0]->Point->coordinates[1];

as i want to get the 4 other markers "LatLongBox"
Tried a few combinations but no joy

0
I havent used it before but I assume its either similar to:

$lat = $store_data->Placemark[0]->ExtendedData->LatLonBox->north[0];

or 

$store_data->Placemark[0]->ExtendedData->LatLonBox->north.nodeValue;

Im afraid im a stumped but if you look up how json parses you might be able to figure our the syntax.

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.