从google maps api中选择一个包含多个结果的地址

时间:2017-02-04 00:28:25

标签: google-maps google-maps-api-3

我正在使用google maps API处理我正在处理的项目,该项目要求用户输入城镇,城市或邮政编码等地址。

我已经准备好使用谷歌的结果了。我面临的问题是,如果一个城镇出现在该国的多个地方。例如,阿什福德(在英国)他的一个小镇位于米德尔塞克斯和肯特郡。

我如何让用户选择他们的意思?我有信心生成一个选择表单,但如果可能的话,我需要一种方法来使用PHP函数来获得2个独立的县。正如您从代码段中看到的那样,没有任何关键可以将两个结果分开。

请注意,我正在使用PHP。

以下是google给我回复的结果:

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"
    }

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

  

正如您从代码段中看到的那样,没有关键可以将两个结果分开。

我遗漏了一些东西:为什么你无法访问(伪代码)document.getElementById("btnPrint").onclick = function() { window.print(); }

这是将两个结果分开的关键:在一个记录中它是Surrey,在另一个记录中它是肯特。

更新:错误。键号不同。

我很糟糕,但实际上工作的是找到所有["results"]["address_components"][2]["long_name"],其中i,b是response.results[0].address_components[i].short_name。见this excellent answer (for a response that is GeoJSON, but can be amended appropriately)

忏悔:我没有明确规定引用相关密钥的方式的原因是每次我必须从一组结果中解析出类似的东西我就是kludge通过它的方式,忘记每次我最后一次如何做到("永远不要记住你可以查找的内容",爱因斯坦说)。如果它是XML则会更容易。

萨里或肯特可能有两个城镇的名称相同,无法根据空间数据区分它们 - 但示例数据并非如此。

忏悔II :当我第一次回答时,我已经键入了'在response.results[0].address_components[i].types[b] == "administrative_area_level_2"上作为区分的正确基础,并扫描回来找到相关节点 - 但只查看了第二条记录。我的坏。