5

住所と郵便番号を必要とする単純なフォームを作成しようとしているので、ユーザーが既に入力した内容に基づいてこれらのフィールドに自動入力する方法があるかどうか疑問に思っていました.

たとえば、郵便番号のみを入力すると、市区町村と国フィールドは自動的に入力され、その逆も同様です。

しばらく検索した後、使用できる可能性のあるこれらのデータベースを見つけました

しかし、それとは別に、PHP と MySQL を使用してこれを行う方法がわかりません。任意の助けをいただければ幸いです。

4

2 に答える 2

1

*これは非常に簡単です。ユーザーから郵便番号を取得するだけで、Google API を使用して $country と $city を取得できます。ここでは、郵便番号、つまり郵便番号から経度と緯度を取得する方法の例を示します。

$postcode=$_POST('postcode');
                if($postcode)
                {

                    $address = urlencode($postcode);
                    $url='http://maps.googleapis.com/maps/api/geocode/json?address='.$address.'&sensor=false';

                    $ch = curl_init(); 
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
                    curl_setopt($ch, CURLOPT_URL, $url);
                    $data = curl_exec($ch);
                    curl_close($ch);
                    $source = $data;
                    $obj = json_decode($source);
                    $lat = $obj->results[0]->geometry->location->lat;
                    $long = $obj->results[0]->geometry->location->lng;


                }
$longitude=$long;
$latitude=$lat;

上記の2つの変数 $longitude と $latitude をデータベースに挿入するよりも.simple as that :) .次のリンクにアクセスしてください

経度と緯度から国名を取得するには、逆ジオコーディングを使用します。latLng パラメータにコンマ区切りの緯度/経度のペアを指定します。

 var geocoder;
  var map;
  var infowindow = new google.maps.InfoWindow();
  var marker;
  function initialize() {
    geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng(40.730885,-73.997383);
    var mapOptions = {
      zoom: 8,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
  }

  function codeLatLng() {
    var input = document.getElementById("latlng").value;
    var latlngStr = input.split(",",2);
    var lat = parseFloat(latlngStr[0]);
    var lng = parseFloat(latlngStr[1]);
    var latlng = new google.maps.LatLng(lat, lng);//here you will get your country and city name
    geocoder.geocode({'latLng': latlng}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        if (results[1]) {
          map.setZoom(11);
          marker = new google.maps.Marker({
              position: latlng,
              map: map
          });
          infowindow.setContent(results[1].formatted_address);
          infowindow.open(map, marker);
        }
      } else {
        alert("Geocoder failed due to: " + status);
      }
    });
  }

ここでリバース ジオコーディングについて読み、必要に応じてコードを変更しますhttps://developers.google.com/maps/documentation/javascript/geocoding#ReverseGeocoding

使用: getLocations(latlng:GLatLng, callback:function)

このメソッドは、緯度/経度のペアを人が読める住所に変換するリバース ジオコーディングを実行します。getLocations() は Google ジオコーディング サービスにリクエストを送信し、指定された latlng の住所を返し、指定されたコールバックで応答を渡すように要求します。

このメソッドは Google サーバーへの呼び出しを必要とするため、応答を処理するためにコールバック メソッドも渡す必要があります。この応答にはステータス コードが含まれ、成功した場合は 1 つ以上の Placemark オブジェクトが含まれます。

上記のように、このメソッドは代わりにアドレス指定可能な文字列を渡す場合があることに注意してください。その場合、サービスは標準のジオコードを実行します。ただし、最初の引数に GLatLng が含まれている場合、サービスは逆ジオコードを実行します。

于 2013-11-04T09:15:04.717 に答える
0

@RoyalBgの言うことはできますが、「ユーザーがすでに入力した内容に基づいて」列を追加する必要がありますuserid

SELECT zip_code FROM locations WHERE country like '%$country%' and userid = 254
于 2013-11-04T09:12:17.603 に答える