从 google maps 地方 api 读取 json 文件(使用 javascript 或 php)
Posted
技术标签:
【中文标题】从 google maps 地方 api 读取 json 文件(使用 javascript 或 php)【英文标题】:Reading the json file from google maps places api (with javascript or php) 【发布时间】:2011-10-26 09:14:34 【问题描述】:我正在构建一个应用程序,我试图在其中获取靠近给定纬度和经度的地点列表。
我有一个 api 密钥,在我的浏览器 url 上输入它可以工作,并给我一个包含地点数据的 json 文件。
https://maps.googleapis.com/maps/api/place/search/json?location=-33.8670522,151.1957362&radius=500&sensor=false&key=AIzaSyAImBQiqvaXOQtqeK8VC-9I96kMmB6Mz7I
但是当我尝试获取并解析它时,虽然 j 查询它没有给我任何东西。
$(document).ready(function()
$.getJSON('https://maps.googleapis.com/maps/api/place/search/json?location=-33.8670522,151.1957362&radius=500&sensor=false&key=AIzaSyAImBQiqvaXOQtqeK8VC-9I96kMmB6Mz7I',
function(data)
alert(data);
);
我发现了以下有关堆栈溢出的问题,但它们无法让我找到答案。
parse google place json with javascript
How do I use Google Places to get an array of Place names?
编辑:
我试图通过
使用 php 获取文件的内容echo file_get_contents("https://maps.googleapis.com/maps/api/place/search/json?location=-33.8670522,151.1957362&radius=500&sensor=false&key=AIzaSyAImBQiqvaXOQtqeK8VC-9I96kMmB6Mz7I");
并使用php获取文件内容。
但是有没有办法用 jquery 或 javascript 来解析这个?
感谢您的帮助。
【问题讨论】:
检查您的 WAMP 发行版的更新。常见的有 HTTPS 可用。你用的是哪一个? 相关:How to enable HTTPS stream wrappers(WAMP 也是) 在我的 windows 框中,使用 HTTPS 流包装器 (PHP 5.3.6) 可从 php.net 获得的默认 PHP 没有问题。 wrapper 至少需要启用 openssl 扩展。检查该扩展程序是否可用并成功加载。 我已经在我的 php.ini 中更改了行 extension=php_openssl.dll .... 还尝试运行 但这在列表中没有给出“https”.. 不仅取消注释该行,还请检查 openssl 扩展是否实际加载,例如cmd:php -m
或执行phpinfo()
。
【参考方案1】:
不允许使用 ajax(直接)跨域请求。我试过了:
echo file_get_contents("https://maps.googleapis.com/maps/api/place/search/json?location=-33.8670522,151.1957362&radius=500&sensor=false&key=AIzaSyAImBQiqvaXOQtqeK8VC-9I96kMmB6Mz7I");
它对我有用(启用了 wamp 2.0 openssl)。
如果你成功了,你可以在同一个域的页面上使用你的ajax脚本来获取内容。
编辑:
这个想法是对你的 php 页面进行 ajax 调用,php 页面从 de google api 获取数据并返回它。 jquery 自动解析 json :)
在代码中:
$.ajax(
url: 'url_to_your_php',
data:
location:'-33.8670522,151.1957362',
radius:500,
sensor:false,
key:'AIzaSyAImBQiqvaXOQtqeK8VC-9I96kMmB6Mz7I',
dataType: "json"
type: "GET", //or POST if you want => update your php in that case
success: function( data )
for(var i in data.results)
doSomthingWithYourLocation(data.results[i]);
,
error: function (request, status, error)
//handle errors
);
你的 php 应该这样做:
<?php
header('Content-type: application/json');
echo file_get_contents("https://maps.googleapis.com/maps/api/place/search/json?" .
"location=-" . $_GET['location'] .
"&radius=" . $_GET['radius'] .
"&sensor=" . $_GET['sensor'] .
"&key=" .$_GET['key']);
?>
最好检查 php 文件中的输入,但这应该可以。
【讨论】:
是的.. 但是打开的 ssl 也没有被加载.. 我取消了 php.ini 行的注释。还有什么事情要做。或者我应该重新安装wamp。如何在启用 open ssl 的情况下安装?【参考方案2】:从一个域加载的脚本无法向另一个域发出 ajax 请求。使用 Google Maps JavaScript api 加载您的数据。
【讨论】:
我尝试了以下链接中的代码code.google.com/apis/maps/documentation/javascript/places.html ..in Place Search Requests 在哪里可以找到附近的地方,我们需要先启动地图。 '服务 = 新的 google.maps.places.PlacesService(map);服务.搜索(请求,回调);' ..可以将其转换为无需启动地图的请求。 我很确定这是不可能的。 Maps API 的想法是使用 Maps,而不是从 Google 获取免费信息。顺便说一句,服务条款 (code.google.com/intl/fr-FR/apis/maps/terms.html) 说:“您不得在没有相应 Google 地图的情况下使用或显示内容,除非 Maps API 文档明确允许您这样做”。通过 PHP 访问 API 违反了 TOS。 但是我得到的数据是我在问题中给出的文件 url。我的问题是通过 php 或 javascript 解析它。【参考方案3】:可以在这里访问 javascript API 的地方:http://code.google.com/apis/maps/documentation/javascript/places.html
【讨论】:
【参考方案4】:你可以这样解析你的对象数据:
$(document).ready(function()
$.getJSON('https://maps.googleapis.com/maps/api/place/search/json?location=-33.8670522,151.1957362&radius=500&sensor=false&key=AIzaSyAImBQiqvaXOQtqeK8VC-9I96kMmB6Mz7I', function(data)
$.each(data, function(index,place)
alert(place.name);
);
);
);
希望对你有帮助。
【讨论】:
它对你有用吗?我认为由于同源政策,它不会起作用。让我检查一下。 :)以上是关于从 google maps 地方 api 读取 json 文件(使用 javascript 或 php)的主要内容,如果未能解决你的问题,请参考以下文章
Google Maps API 错误:此 API 密钥无权使用此服务或 API。地方 API 错误:ApiTargetBlockedMapError
从 Google Maps API 中的单个 LatLong 确定缩放级别
TypeError:无法使用 google-maps api 和 rapidapi 读取 null 的属性(读取“sw”)