我想在我的应用程序中添加一个包含附近商店列表的地图。我想集成OpenStreetMap,但我不知道从哪里开始,即使当我试图添加twebbrowser组件,我把url"www.openstreetmap.org"我没有结果,我试着做一个HTML url
OpenStreetMapsPage: AnsiString =
'<html> '+
'<head> '+
'<meta name="viewport" content="initial-scale=1.0, user-scalable=yes" /> '+
'<script src="http://www.openlayers.org/api/OpenLayers.js"></script> '+
'<script type="text/javascript"> '+
' function initialize() '+
'{'+
' map = new OpenLayers.Map("map_canvas");'+
' map.addLayer(new OpenLayers.Layer.OSM()); '+
' var lonLat = new OpenLayers.LonLat( [Lng] , [Lat] ) '+
' .transform( '+
' new OpenLayers.Projection("EPSG:4326"), '+
' map.getProjectionObject() '+
' ); '+
' var zoom=16; '+
' var markers = new OpenLayers.Layer.Markers( "Markers" ); '+
' map.addLayer(markers); '+
' markers.addMarker(new OpenLayers.Marker(lonLat)); '+
' map.setCenter (lonLat, zoom); '+
'}'+
''+'</script> '+
'</head> '+
'<body onload="initialize()"> '+
' <div id="map_canvas" style="width:100%; height:100%"></div> '+
'</body>'+
'</html>';
和什么都没有,有人可以帮助我,请和谢谢你
有几种可能性…我在我的一个应用程序中使用的一种方法,很快将作为开源发布,是使用"tile服务器"。获得"瓷砖"对于您感兴趣的地图区域。
地图贴片服务器将返回一个带有贴片图像的PNG文件。像这样。你可以在这里找到文档。
该平铺可以像任何其他图像一样显示在应用程序中。你只需要在网格中显示tile。
在上面的示例中,URL是:https://tile.openstreetmap.org/7/63/42.png在该URL中,7是缩放因子,63是TileX, 42是TileY。TileX, TileY可以计算纬度,经度和缩放因子,代码如下:
function LongitudeToTileX(
lon : Double;
z : Integer) : Integer; // Zoom factor 0..19
begin
Result := Floor((lon + 180.0) / 360.0 * (1 shl z));
end;
function LatitudeToTileY(
lat : Double;
z : Integer) : Integer;
begin
Result := Floor((1.0 - ArcSinh(Tan(DegToRad(lat))) / PI) / 2.0 * (1 shl z));
end;
要显示地图,需要计算给定缩放比例下总地图图像的左上角和右下角的TileX和TileY。然后迭代TileX和TileY以使用任何HTTP组件(我使用ICS)获取tile。
我把我已经下载的文件保存在本地存储的文件中,这样一旦下载,我就不会再下载了,除非我的本地文件太旧了。