2012-02-29 124 views
4

我正在制作一个网站,访问者在地图上显示位置并在选定的半径(例如10公里)内显示访问者可以看到一些POI(例如餐馆,酒吧)。地理位置:使用OpenStreetMap绘图和POI

我到目前为止这样的代码:

<!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_KEY]&sensor=false"> 
     </script> 
     <script type="text/javascript"> 
      function init() 
      { 
       if(navigator.geolocation) 
       { 
        navigator.geolocation.getCurrentPosition (processPosition, handleError); 
       } 
       else 
       { 
        alert("Geolocation not supported in this browser"); 
       } 
      } 

      function processPosition(pos) 
      { 
       var latlng = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude); 

       var myOptions = { 
        center: latlng, 
        zoom: 16, 
        mapTypeId: google.maps.MapTypeId.ROADMAP 
       }; 
       var map = new google.maps.Map(document.getElementById("map_canvas"), 
       myOptions); 

       var marker = new google.maps.Marker({ 
        position: latlng, 
        map: map, 
        title:"You are here! (at least within a "+pos.coords.accuracy+" meter radius)" 
       }); 
      } 

      function handleError(err) 
      { 
       alert('An error occurred: ' + err.code); 
      } 

     </script> 
    </head> 
    <body onload="init()"> 
     <div id="map_canvas" style="width:100%; height:100%"></div> 
    </body> 
</html> 

它显示了我,我用谷歌地图标记在地图上的位置。
事情是,我想使用来自OpenStreetMap的地图(它们定期更新并且没有限制),但不幸的是我还没有设法实现它。

这里有我需要的地图:Maps

1.是否有一个例子(教程),它展示了如何使用他们的API,如Google的?
2. OpenStreetMap有类似POI的东西,比如Google Places?或者甚至可以将Google Places与OpenStreetMap的地图一起使用?

回答

2

如果你想使用OpenStreetMap数据,你应该看看OpenLayers。这与Google Maps或Bing Maps API有点不同:您必须在您的服务器上安装OpenLayers JavaScript库,并负责显示可能来自各种来源的地图数据(“地图切片”):OpenStreetMap (OSM),Google地图,您自己的自定义地图数据等。OpenStreetMap website本身使用OpenLayers来显示地图。

1:有documentation很多(虽然我恐怕不太对谷歌地图API一样好)和examples,包括一些使用OpenStreetMap的数据,单独或伙同谷歌的数据(在输入“OSM”顶部的“过滤器”框)。

2:至于POI,您可以在地图上放置一个"Marker Layer",如this example,包括点击图标时出现的可定制标记图标和气泡,但您必须处理POI的数据和搜索功能自己。因此,如果您愿意,您可以自由使用Google Places API,然后在OpenStreetMap上将结果显示为标记 - 只要您使用“Powered by Google”标志即可。

+0

我不会花时间开发任何使用Google技术的应用程序,除非您的应用程序产生足够的收入以支付Google地图服务。 – 2012-07-10 11:55:20

+1

不允许在OSM地图上显示Google地方信息:“如果您的应用程序在地图上显示地图API数据,则该地图必须由Google提供。” (https://developers.google.com/places/policies) – 2012-12-13 14:40:07