在Google地图上显示搜索结果

时间:2014-01-10 15:40:56

标签: javascript php api google-maps

目前网站是用PHP编码的,结果是使用API​​网址从数据库中提取的。搜索结果默认返回10个项目,需要在地图上绘制。

到目前为止,这是我的代码:

<?php
// Loading Domus API
$url_search = 'http://url/site/go/api/search';
$xml_search = @simplexml_load_file($url_search) or die ("no file loaded") ;
//Displaying latitude and longutude
$xml_search = json_decode($xml_search);
foreach($xml_search->property as $house) { 
    echo $lat = $house->address->latitude , $long = $house->address->longitude;
    };

&GT;

然后我有了JavaScripts

var locations = [

];

var map = new google.maps.Map(document.getElementById('map'), {
  zoom: 10,
  center: new google.maps.LatLng(-33.92, 151.25),
  mapTypeId: google.maps.MapTypeId.ROADMAP
});

var infowindow = new google.maps.InfoWindow();

var marker, i;

for (i = 0; i < locations.length; i++) {  
  marker = new google.maps.Marker({
    position: new google.maps.LatLng(locations[i][1], locations[i][2]),
    map: map
  });

  google.maps.event.addListener(marker, 'click', (function(marker, i) {
    return function() {
      infowindow.setContent(locations[i][0]);
      infowindow.open(map, marker);
    }
  })(marker, i));
}

但这当然不起作用。

1 个答案:

答案 0 :(得分:1)

要将地图上的点指向您想要的位置,您需要确定要绘制的地点的经度/纬度。我建议您使用Google Maps Geocoding API为您解决这个问题,例如,让我们使用County Beds中的火车站,邮编MK401DR。

使用URL将该邮政编码提供给Geocode API,如此

http://maps.googleapis.com/maps/api/geocode/json?address=MK401DR,+UK&sensor=true

你会得到一个带有地址信息的JSON数组,但最重要的是你在"geometry"下你会看到它给你经度/纬度位置,例如:

"lat" : 52.1516477,
"lng" : -0.4437241

例如,如果你将那个long / lat输入我给你(https://code.google.com/apis/ajax/playground/#markers_v3)的谷歌API游乐场链接,就像这样

var map;
function initialize() {
  var mapDiv = document.getElementById('map-canvas');
  map = new google.maps.Map(mapDiv, {
    center: new google.maps.LatLng(52.1516477, -0.4437241),
    zoom: 13,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  });

google.maps.event.addListenerOnce(map, 'tilesloaded', addMarkers);

}

function addMarkers() {
  var bounds = map.getBounds();
  var southWest = bounds.getSouthWest();
  var northEast = bounds.getNorthEast();
  var lngSpan = northEast.lng() - southWest.lng();
  var latSpan = northEast.lat() - southWest.lat();
  var latLng = new google.maps.LatLng(52.1516477, -0.4437241);
  var marker = new google.maps.Marker({
    position: latLng,
    map: map
  });
}

你现在在贝德福德郡的火车站附近有一张地图(是的,你需要弄清楚地理编码api给你的长/纬是最准确的,你喂地理编码的地址越多API标记为你标记的长/纬度越准确。

然后你可以通过添加另一个

来添加另一个标记
 var latLng = new google.maps.LatLng([latitude], [longitude]);
 var marker = new google.maps.Marker({
    position: latLng,
    map: map
 });

因此,您需要浏览所有点的所有地址,并获取它们的经度/纬度(如果您还没有它们)。然后,您需要将它们提供给Google Maps API javascript,它会为您绘制标记。

修改

如何自动绘制从PHP到javascript的点数的非常粗略的示例,您显然需要包含其余的Google Maps API js&amp;相关的HTML容器等...

<?php
// array of properties
$properties = array(
  array('long' => '52.1516477', 'lat' => '-0.4437241'),
  array('long' => '52.1526477', 'lat' => '-0.4438241'),
  array('long' => '52.1536477', 'lat' => '-0.4439241'),
  array('long' => '52.1546477', 'lat' => '-0.4439641'),
)
?>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<script type="text/javascript">
  $(document).ready(function(){
      var properties_array = <?php echo json_encode($properties)?>;

      function plot_map_points() {
          $.each(properties_array, function(index, value) {
              var latLng = new google.maps.LatLng(value['lat'], value['long']);
              var marker = new google.maps.Marker({
                  position: latLng,
                  map: map
              });
          });
      }
      plot_map_points();
  });
</script>