Google maps 从google maps api中选择一个地址并显示多个结果
我正在为一个项目使用谷歌地图API,该项目要求用户输入一个地址,如城镇、城市或邮政编码 我已经从谷歌获得了可以使用的结果。我面临的问题是,如果一个城镇出现在全国多个地方。例如,阿什福德(英国)在米德尔塞克斯郡和肯特郡的一个城镇工作 我如何让用户选择他们的意思?我有信心生成一个select表单,但是如果可能的话,我需要一种方法使用PHP函数来获得两个不同的县。正如您将从代码段中看到的,没有键来分隔这两个结果 请注意,我正在使用PHP 以下是谷歌给我的结果:Google maps 从google maps api中选择一个地址并显示多个结果,google-maps,google-maps-api-3,Google Maps,Google Maps Api 3,我正在为一个项目使用谷歌地图API,该项目要求用户输入一个地址,如城镇、城市或邮政编码 我已经从谷歌获得了可以使用的结果。我面临的问题是,如果一个城镇出现在全国多个地方。例如,阿什福德(英国)在米德尔塞克斯郡和肯特郡的一个城镇工作 我如何让用户选择他们的意思?我有信心生成一个select表单,但是如果可能的话,我需要一种方法使用PHP函数来获得两个不同的县。正如您将从代码段中看到的,没有键来分隔这两个结果 请注意,我正在使用PHP 以下是谷歌给我的结果: object(stdClass)#551
object(stdClass)#5519 (2) {
["results"]=>
array(2) {
[0]=>
object(stdClass)#5541 (5) {
["address_components"]=>
array(5) {
[0]=>
object(stdClass)#5546 (3) {
["long_name"]=>
string(7) "Ashford"
["short_name"]=>
string(7) "Ashford"
["types"]=>
array(2) {
[0]=>
string(8) "locality"
[1]=>
string(9) "political"
}
}
[1]=>
object(stdClass)#5545 (3) {
["long_name"]=>
string(7) "Ashford"
["short_name"]=>
string(7) "Ashford"
["types"]=>
array(1) {
[0]=>
string(11) "postal_town"
}
}
[2]=>
object(stdClass)#5544 (3) {
["long_name"]=>
string(4) "Kent"
["short_name"]=>
string(4) "Kent"
["types"]=>
array(2) {
[0]=>
string(27) "administrative_area_level_2"
[1]=>
string(9) "political"
}
}
[3]=>
object(stdClass)#5543 (3) {
["long_name"]=>
string(7) "England"
["short_name"]=>
string(7) "England"
["types"]=>
array(2) {
[0]=>
string(27) "administrative_area_level_1"
[1]=>
string(9) "political"
}
}
[4]=>
object(stdClass)#5542 (3) {
["long_name"]=>
string(14) "United Kingdom"
["short_name"]=>
string(2) "GB"
["types"]=>
array(2) {
[0]=>
string(7) "country"
[1]=>
string(9) "political"
}
}
}
["formatted_address"]=>
string(11) "Ashford, UK"
["geometry"]=>
object(stdClass)#5537 (4) {
["bounds"]=>
object(stdClass)#5539 (2) {
["northeast"]=>
object(stdClass)#5540 (2) {
["lat"]=>
float(51.1841519)
["lng"]=>
float(0.914884)
}
["southwest"]=>
object(stdClass)#5538 (2) {
["lat"]=>
float(51.1228136)
["lng"]=>
float(0.8276781)
}
}
["location"]=>
object(stdClass)#5536 (2) {
["lat"]=>
float(51.1464659)
["lng"]=>
float(0.875019)
}
["location_type"]=>
string(11) "APPROXIMATE"
["viewport"]=>
object(stdClass)#5534 (2) {
["northeast"]=>
object(stdClass)#5535 (2) {
["lat"]=>
float(51.1841519)
["lng"]=>
float(0.914884)
}
["southwest"]=>
object(stdClass)#5533 (2) {
["lat"]=>
float(51.1228136)
["lng"]=>
float(0.8276781)
}
}
}
["place_id"]=>
string(27) "ChIJh_M23CLD3kcRHsaOYTRPDSg"
["types"]=>
array(2) {
[0]=>
string(8) "locality"
[1]=>
string(9) "political"
}
}
[1]=>
object(stdClass)#5528 (5) {
["address_components"]=>
array(4) {
[0]=>
object(stdClass)#5532 (3) {
["long_name"]=>
string(7) "Ashford"
["short_name"]=>
string(7) "Ashford"
["types"]=>
array(2) {
[0]=>
string(8) "locality"
[1]=>
string(9) "political"
}
}
[1]=>
object(stdClass)#5531 (3) {
["long_name"]=>
string(6) "Surrey"
["short_name"]=>
string(6) "Surrey"
["types"]=>
array(2) {
[0]=>
string(27) "administrative_area_level_2"
[1]=>
string(9) "political"
}
}
[2]=>
object(stdClass)#5530 (3) {
["long_name"]=>
string(7) "England"
["short_name"]=>
string(7) "England"
["types"]=>
array(2) {
[0]=>
string(27) "administrative_area_level_1"
[1]=>
string(9) "political"
}
}
[3]=>
object(stdClass)#5529 (3) {
["long_name"]=>
string(14) "United Kingdom"
["short_name"]=>
string(2) "GB"
["types"]=>
array(2) {
[0]=>
string(7) "country"
[1]=>
string(9) "political"
}
}
}
["formatted_address"]=>
string(11) "Ashford, UK"
["geometry"]=>
object(stdClass)#5524 (4) {
["bounds"]=>
object(stdClass)#5526 (2) {
["northeast"]=>
object(stdClass)#5527 (2) {
["lat"]=>
float(51.4399966)
["lng"]=>
float(-0.4279375)
}
["southwest"]=>
object(stdClass)#5525 (2) {
["lat"]=>
float(51.4208625)
["lng"]=>
float(-0.4913756)
}
}
["location"]=>
object(stdClass)#5523 (2) {
["lat"]=>
float(51.4274516)
["lng"]=>
float(-0.4552643)
}
["location_type"]=>
string(11) "APPROXIMATE"
["viewport"]=>
object(stdClass)#5521 (2) {
["northeast"]=>
object(stdClass)#5522 (2) {
["lat"]=>
float(51.4399966)
["lng"]=>
float(-0.4279375)
}
["southwest"]=>
object(stdClass)#5520 (2) {
["lat"]=>
float(51.4208625)
["lng"]=>
float(-0.4913756)
}
}
}
["place_id"]=>
string(27) "ChIJY_intExxdkgRVdGnlWdcKVw"
["types"]=>
array(2) {
[0]=>
string(8) "locality"
[1]=>
string(9) "political"
}
}
}
["status"]=>
string(2) "OK"
}
非常感谢您的帮助
正如您将从代码段中看到的,没有键来分隔这两个结果
我遗漏了一些东西:为什么您不能访问(伪代码)[“结果”][“地址组件”][2][“长名称”]
这是区分两个结果的关键:一个是萨里,另一个是肯特
更新:错误。钥匙号码不同。
我的不好,但实际有效的方法是查找所有response.results[0]。address\u components[i]。short\u name
其中i,b是response.results[0]。address\u components[i]。类型[b]=“administrative\u area\u level\u 2”
。看
自白:我没有明确指出引用问题关键点的方法的原因是,每次我必须从一组结果中解析类似的东西时,我都会艰难地通过它,忘记上次我是如何做到的(“永远不要记住你可以查到的东西”,爱因斯坦说)。如果是XML,那就更容易了
萨里或肯特郡可能有两个城镇的名字相同,根据空间数据无法区分它们——但在示例数据中并非如此
自白II:当我第一次回答时,我“键入”了
行政区级别2
,作为区分的正确依据,并扫描回以查找相关节点,但只查看了第二条记录。我的错误。因为键[2]对两个结果都不对齐。一个是钥匙2,另一个是钥匙1。真的(诅咒我愚蠢的老眼睛)。。。但是,您可以找到具有child=“administrative\u area\u level\u 2”-find allresponse.results[0]。address\u components[i]。short\u name
wherei,b
s.t.response.results[0]。address\u components[i]。类型[b]==“administrative\u area\u level\u 2”
。请参阅此答案(对于属于GeoJSON的响应,但可以适当修改):-适当地更新了我的答案我以前尝试使用“array_search”执行类似操作,但它只会找到属于该条目的键,当然是[0]。这个答案太完美了!非常感谢你!非常感谢。