2012-03-08 19 views
2

基本的には、さまざまなデータポイント(名前、電子メールなど)を持つSQLデータベースと、重要なアドレスを含むフィールドです。私がしようとしているのは、ジオコーディングシステムを使ってGoogleマップ上のピンをプロットするために、これらのアドレス(恐らく郵便番号のみ)を使用することです。私は配列のデータベースから全てのzipを集める必要があることを知っていて、すべてのzipに対して何らかのforeachを実行する必要がありますが、これを行う方法がわかりません。ここまで私がこれまで持っていたことは、誰でも私を助けることができますか?代わりにジッパーをジオコードするには、JavaScript APIを使用してのPHP/mySQLとGoogleマップのジオコーディング

<?php 
$dbh=mysql_connect('my_database_host.edu','my_database_user','my_database_password'); 

if (!$dbh) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 
mysql_select_db('my_database_name', $dbh); 

$query = "SELECT fldZip FROM tblLocation"; 
$findzips = mysql_query($query); 
while($row =mysql_fetch_array($findzips)) { 
    echo $row['fldZip']; 
    } 

?> 

<!DOCTYPE html> 
<html> 
    <head> 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
    <style type="text/css"> 
     html { height: 100% } 
     body { height: 100%; margin: 0; padding: 0 } 
     #map_canvas { height: 100% } 
    </style> 
    <script type="text/javascript" 
     src="http://maps.googleapis.com/maps/api/js?key=my_api_key&sensor=false"> 
    </script> 
    <script type="text/javascript"> 
    var geocoder; 
    var map; 
    function initialize() { 
    geocoder = new google.maps.Geocoder(); 
    var latlng = new google.maps.LatLng(-34.397, 150.644); 
    var myOptions = { 
     zoom: 8, 
     center: latlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    } 
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

} 

    function codeAddress(address) { 
    geocoder.geocode({ 'address': address}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
     map.setCenter(results[0].geometry.location); 
     var marker = new google.maps.Marker({ 
      map: map, 
      position: results[0].geometry.location 
     }); 
     } else { 
     alert("Geocode was not successful for the following reason: " + status); 
     } 
    }); 
    } 
</script> 
</head> 
<body onload="initialize()"> 
<div id="map_canvas" style="height:90%;top:30px"></div> 
</body> 
</html> 

答えて

4

はPHP経由geocoding-webserviceを使用しています。

LatLngをDBに格納するのも良い点です。そのため、再度リクエストする必要はありません。

+0

ああ、私はPHPのGoogle Mapsジオコーディングサービスがあることに気づいていませんでした。私はあなたに助けてくれてありがとうございます。 – Wakeeta

0

私は同じ問題をMySQLデータベースからのアドレスをジオコードすることを試みました。だから、私は私のソリューションを投稿しています。

<script type="text/javascript" charset="utf-8"> 

    var customIcons = { 
     restaurant: { 
     icon: 'http://labs.google.com/ridefinder/images/mm_20_blue.png', 
     shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png' 
     }, 
     bar: { 
     icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png', 
     shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png' 
     }, 
     club: 
     { 
     icon: 'http://labs.google.com/ridefinder/images/mm_20_yellow.png', 
     shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png' 
     }, 
     church: 
     { 
     icon: 'http://labs.google.com/ridefinder/images/mm_20_green.png', 
     shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png' 
     } 
    }; 

     function initialize() 
     { 
     var mapOptions = { 
      center: new google.maps.LatLng(37.976178, 23.735881), 
      zoom: 7, 
      mapTypeId: google.maps.MapTypeId.roadmap 
     }; 
     var map = new google.maps.Map(document.getElementById("map-canvas"), 
      mapOptions); 
     <?php header("content-type: text/html;charset=utf-8"); 
     $getpoints = "SELECT lat, lng, name, address, type FROM markers"; 

     if(!$result = $con->query($getpoints)){ 
     die('There was an error running the query 
     [' . $con->error . ']'); 
     } 

     else 
     { 
      while ($row = $result->fetch_assoc()) 
      { 
       $thematic = "'$row[type]'"; 
       $name = "'$row[name]'"; 
       $map_address = "$row[address]"; 

       $url = "http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=".urlencode($map_address); 
       $lat_long = get_object_vars(json_decode(file_get_contents($url))); 

       // pick out what we need (lat,lng) 
       $lat_long = $lat_long['results'][0]->geometry->location->lat . "," . $lat_long['results'][0]->geometry->location->lng; 

       echo "var myLatlng1 = new google.maps.LatLng($lat_long); 
       var icon = customIcons[$thematic] || {}; 
       var marker1 = new google.maps.Marker({ 
       position: myLatlng1, 
       map: map, 
       icon: icon.icon, 
       title: '$map_address' 
       });";   
      } 
     }  

     ?>  
     } 

     google.maps.event.addDomListener(window, 'load', initialize); 
    </script> 

アドレスはデータベースのアドレスフィールドです。

関連する問題