" Admin" "address" => "111 Park AveFloor 4 -6ren">
gpt4 book ai didi

javascript - 根据地址获取经纬度

转载 作者:可可西里 更新时间:2023-11-01 13:27:41 25 4
gpt4 key购买 nike

我有

用户地址数组

array:5 [▼
0 => array:2 [▼
"name" => " Admin"
"address" => "111 Park AveFloor 4 New York, NY"
]
1 => array:2 [▼
"name" => "User A"
"address" => "12 Main Street Cambridge, MA"
]
2 => array:2 [▼
"name" => "Apple HQ"
"address" => "1 Infinite Loop Cupertino, California"
]
3 => array:2 [▼
"name" => "Google MA"
"address" => "355 Main St Cambridge, MA"
]
4 => array:2 [▼
"name" => "site HQ"
"address" => "300 Concord Road Billerica, MA "
]
]

我的目标

就是抓取每个地址的latlng,构造成这样

[
["Admin", 18.3114513, -66.9219513, 0],
["User A", 25.3253982, 44.5503772, 1],
["Apple HQ", 33.0241101, 39.5865834, 2],
["Google MA", 43.9315743, 20.2366877, 3],
["site HQ", 32.683063, 35.27481, 4]
]

这样我就可以在 Google map 中绘制它们。


我试过:

curl 到

https://maps.googleapis.com/maps/api/geocode/json?address='.$address.'&key=***

$data = shell_exec('curl'.$url);


我得到了

解码后作为响应返回

$data = json_decode($data);

{#278 ▼
+"results": array:1 [▼
0 => {#298 ▼
+"address_components": array:2 [▶]
+"formatted_address": "PR-111, Puerto Rico"
+"geometry": {#300 ▼
+"bounds": {#301 ▶}
+"location": {#304 ▼
+"lat": 18.3114513
+"lng": -66.9219513
}
+"location_type": "GEOMETRIC_CENTER"
+"viewport": {#305 ▶}
}
+"place_id": "ChIJrdMXucS4AowRF4jHu2ji58U"
+"types": array:1 [▶]
}
]
+"status": "OK"
}

如你所见,现在我可以通过访问来访问经纬度

$location = $data->results[0]->geometry->location;

你可能会说,如果你可以访问它 - 你为什么还要问这个问题?

好吧,我从 API 响应返回的 lat,lng 数据产生了错误的 Google map 标记。

我不确定为什么/怎么错了,但我确定我的所有用户地址都在美国,这是我的 Google map 标记结果。它们都没有出现在美国境内。

谷歌地图结果

enter image description here


我现在已经没有想法了。

任何提示/帮助/建议对我来说意义重大。


更新

多亏了这个answer

我现在可以获取 lat,lng 并在我的 Google map 上绘制正确的标记。


最终结果

enter image description here

最佳答案

在将地址传递给 curl 之前,您应该对其进行 url 编码。

urlencode($address);

如果不对地址中的空格进行编码,可能会导致不可预知的问题。

这是一个发生的例子:

没有 url 编码:

curl https://maps.googleapis.com/maps/api/geocode/json?address=111 Park AveFloor 4 New York, NY

{
"results" : [
{
"address_components" : [
{
"long_name" : "111",
"short_name" : "PR-111",
"types" : [ "route" ]
},
{
"long_name" : "Puerto Rico",
"short_name" : "PR",
"types" : [ "country", "political" ]
}
],
"formatted_address" : "PR-111, Puerto Rico",
"geometry" : {
"bounds" : {
"northeast" : {
"lat" : 18.4485405,
"lng" : -66.6643718
},
"southwest" : {
"lat" : 18.2420721,
"lng" : -67.15701799999999
}
},
"location" : {
"lat" : 18.3114513,
"lng" : -66.9219513
},
"location_type" : "GEOMETRIC_CENTER",
"viewport" : {
"northeast" : {
"lat" : 18.4485405,
"lng" : -66.6643718
},
"southwest" : {
"lat" : 18.2420721,
"lng" : -67.15701799999999
}
}
},
"place_id" : "ChIJrdMXucS4AowRF4jHu2ji58U",
"types" : [ "route" ]
}
],
"status" : "OK"
}

使用 url 编码:

curl https://maps.googleapis.com/maps/api/geocode/json?address=111+Park+AveFloor+4+New+York%2C+NY
{
"results" : [
{
"address_components" : [
{
"long_name" : "111",
"short_name" : "111",
"types" : [ "street_number" ]
},
{
"long_name" : "Park Avenue",
"short_name" : "Park Ave",
"types" : [ "route" ]
},
{
"long_name" : "Midtown East",
"short_name" : "Midtown East",
"types" : [ "neighborhood", "political" ]
},
{
"long_name" : "Manhattan",
"short_name" : "Manhattan",
"types" : [ "sublocality_level_1", "sublocality", "political" ]
},
{
"long_name" : "New York",
"short_name" : "New York",
"types" : [ "locality", "political" ]
},
{
"long_name" : "New York County",
"short_name" : "New York County",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "New York",
"short_name" : "NY",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "United States",
"short_name" : "US",
"types" : [ "country", "political" ]
},
{
"long_name" : "10170",
"short_name" : "10170",
"types" : [ "postal_code" ]
}
],
"formatted_address" : "111 Park Ave, New York, NY 10170, USA",
"geometry" : {
"bounds" : {
"northeast" : {
"lat" : 40.7522096,
"lng" : -73.9773591
},
"southwest" : {
"lat" : 40.7521971,
"lng" : -73.97736809999999
}
},
"location" : {
"lat" : 40.7521971,
"lng" : -73.97736809999999
}...

关于javascript - 根据地址获取经纬度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35140021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com