3

GMapsAPI開発者の皆さん。まず、Google Maps / JSAPIv3のすばらしい製品とサービスをご紹介します。ありがとうございました。さて、その重要な心からの感謝の気持ちを邪魔しないで...

住所コンポーネントのshort_namevslong_nameオプションは優れた機能ですが、各サービスについて、これら2つの属性にはほとんど同じ値が含まれています。ただし、地理コードには両方に期待short_nameするものがあり、場所には両方に期待するものがlong_nameあります。*涙*

Placesライブラリが公開される前は、Googleには実際には通りの名前や地域などの短いバージョンや長いバージョンがないと思っていましたが、今ではどこにそのフォーマットがあるようです。製品チームごとにデータベースが異なるのではないでしょうか。

それで、取引は何ですか?

私が話していることの画像(埋め込まれますが、これは私の最初のスタックオーバーフローの質問なので評判はありません):http://i.imgur.com/XPVj8.png

これがどのように機能するかについての詳細なリスト:

  • ルートの場合、ジオコードのshort_name場所 'long_name
  • 地理コードと場所の間のローカリティ/サブローカリティに同じ「タイプ」値があります(どちらでもかまいません。1つだけ選択してください)
  • 状態の短い/長いを一貫して提供します(administrative_area_level_1)-地理コードはこれを正しく取得しますが、場所は正しくありません
  • 国についても同じです。ジオコードは、フォーマットされた住所の「USA」をどこで取得していますか?
  • postal_code long_namezip + 4があればいいのですが、データの観点からは大きな努力になると思います。

どうもありがとう-この振る舞いについての洞察を楽しみにしています!

画像の背後にあるコード:

<!DOCTYPE html>
<html>
  <head>
  <meta charset="UTF-8">
  <title>GMaps API V3 Geocoder vs Places Address Components | Short vs Long Name</title>
  <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=true&libraries=places"></script>
  <style type="text/css">
    #map {height: 100px; width: 600px; border: 1px solid #333; margin-top: 0.6em; }
    table { border-collapse: collapse; border-spacing: 0; }
    table td {border-top: 1px solid #DDD; padding:4px 8px; }
  </style>
  <script type="text/javascript">
    var map, geocoder, places, geocode_components, geocode_formatted, places_components, places_formatted
    function initialize() {
      geocoder = new google.maps.Geocoder();
      geocoder.geocode({'address': '3 South Main Street, York New Salem, PA'},
      function (results, status) {
        geocode_components = results[0].address_components;
        geocode_formatted = results[0].formatted_address;
        map = new google.maps.Map(document.getElementById('map'), {
          mapTypeId: google.maps.MapTypeId.ROADMAP,
          center: results[0].geometry.location,
          zoom: 10
        });

        places = new google.maps.places.PlacesService(map);
        places.search({location: results[0].geometry.location, radius:100, keyword: "Pizza"},
          function(results, status) {
            //get details - this feels a little extraneous to me, but y'all know best
            places.getDetails({reference: results[0].reference},
            function(result, status) {
              places_components = result.address_components;
              places_formatted = result.formatted_address;
              writeResults();
            });
          });
      });
    }

    function writeResults() {
    tbody = document.getElementById('results');
    formatted = document.getElementById('formatted');
    var rows = "";
    for(var i=0; i<geocode_components.length; i++) {
      var c = geocode_components[i];
      rows = rows + '<tr><td>Geocoding</td><td>' + c.types[0] + '</td><td>' + c.short_name + '</td><td>' + c.long_name + '</td></tr>';
    }

    for(var i=0; i<places_components.length; i++) {
      var c = places_components[i];
      rows = rows + '<tr><td>Places</td><td>' + c.types[0] + '</td><td>' + c.short_name + '</td><td>' + c.long_name + '</td></tr>';
    }
    tbody.innerHTML = rows;
    formatted.innerHTML = '<br />Geocode Formatted: ' + geocode_formatted + '<br />' + 'Places Formatted: ' + places_formatted;
  }
  google.maps.event.addDomListener(window, 'load', initialize);
  </script>
  </head>
  <body>
  <div id="map"></div>
  <table>
    <thead><tr><th>Service</th><th>Type</th><th>Short Name</th><th>Long Name</th></tr></thead>
    <tbody id="results"></tbody>
  </table>
  <div id="formatted"></div>
</body>
</html>
4

1 に答える 1

0

コメントに記載されているように、この質問(リクエスト)は2013年1月に修正/実装されました。https://issuetracker.google.com/issues/35821543を参照してください。

于 2018-07-10T15:13:13.457 に答える