Delphi FMX et OpenStreetmap



我想在我的应用程序中添加一个包含附近商店列表的地图。我想集成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。

我把我已经下载的文件保存在本地存储的文件中,这样一旦下载,我就不会再下载了,除非我的本地文件太旧了。

相关内容

  • 没有找到相关文章

最新更新