基于地址数据在嵌入式Open Street Map上显示标记

时间:2011-10-31 08:32:57

标签: javascript geocoding openstreetmap

目前,我使用从我的数据库中检索到的地址提供显示带有标记的Google地图的页面。我目前使用一段相当简单的javascript代码通过地理编码添加该标记。我的js代码是由php动态生成的。除了使用地址搜索字符串初始化的“查询”定义外,所有内容都是静态的。

我是OSM的新手并做了一些研究,看看它是否能实现这一目标。目前我不确定它能不能。我发现有几个js api就像OpenLayers,我需要使用它。

总结一下:

如何向OSM添加和显示单个标记,其位置基于地址而非纬度/经度对?

我目前基于谷歌的代码是:

<script>
var geocoder; var map; var marker;
var query = 'Deutschland, Berlin, Platz der Republik 1, 11011';

function initialize()
{        
var companyLocation = new google.maps.LatLng(51.964577109947506, 5.07568359375);      
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(-34.397, 150.644);
var myOptions = { zoom: 11, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP }
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
codeAddress();
}

function codeAddress()
{
var address = query;
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,
     title: "Bundestag",
     labelContent: "",
     labelAnchor: new google.maps.Point(22, 0),
     labelClass: "labels", // the CSS class for the label
     labelStyle: {opacity: 0.75}
  });        
  } else {
    $('#map_canvas').html('<p style="margin: 15px">Address could not be found</p>');
  }
});
}
</script>

1 个答案:

答案 0 :(得分:0)

请参阅http://wiki.openstreetmap.org/wiki/Nominatim

不打算为您编写代码,但该Wiki页面包含有关如何调用Nominatim地理编码服务的详细信息。