2012-03-08 4 views
2

기본적으로 데이터베이스에있는 다양한 데이터 요소 (이름, 전자 메일 등)와 중요한 주소가 포함 된 SQL 데이터베이스가 있습니다. 내가 시도하는 것은이 지오 코딩 시스템을 사용하여 Google지도에서 핀을 플롯하기 위해이 주소 (아마도 우편 번호 일 수도 있음)를 사용하는 것입니다. 나는 배열의 데이터베이스에서 모든 zip을 수집해야하고 모든 zip에 대해 foreach를 수행해야하지만이 작업을 수행하는 방법은 확실하지 않습니다. 여기 내가 지금까지 가지고있는 것이 있습니다. 누군가 저를 도울 수 있습니까? 대신에 ZIP 파일을 지오 코딩하기 위해 자바 스크립트 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 Geocoding 서비스가 있다는 것을 몰랐습니다. 그 점을 조사해야합니다. 도움을 주셔서 감사합니다. – 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> 

주소는 데이터베이스의 주소 필드입니다.