我正在尝试使用Bing Maps WPF控件从虚构的游戏世界地图的图像渲染自定义地图图块,但我还需要在原始世界图像上绘制地图上的X,Y值(有点像世界上的GPS)。
图像是5720x5720,我已经在(在不同的应用程序中)工作,手动裁剪,缩放和重绘图像的各个部分,并绘制PictureBox中的pixelX和pixelY坐标。我想使用地图控件来实现相同的功能。
我使用这个Photoshop插件从原始自定义图像中剪切图块(像google mapes的maptiler一样工作) https://github.com/bramus/photoshop-google-maps-tile-cutter/
问题是我知道要从原始图像绘制的X,Y值,但我不太确定如何计算Lat / Long以在自定义图块系统中绘制点。
<m:Map Name="Map">
<m:Map.Mode>
<!-- set empty map mode, i.e. remove default map layer -->
<m:MercatorMode/>
</m:Map.Mode>
<local:MyTileLayer UriFormat="file:///C:/map_tiles/{z}_{x}_{y}.jpg"/>
</m:Map>
地图显示效果很好,使用自定义地图图块一切正常。我发现这个链接提供了一个用于在TileSystem中将PixelXY转换为LatLong的类,但它们都是用于逼真的世界点。
https://msdn.microsoft.com/en-us/library/bb259689.aspx
我的自定义地图图块实际上是用于游戏的虚构地图,所以我不相信在我的情况下需要投影和地球曲率计算。
如果我只知道原始未处理图像中的X,Y像素坐标,我该如何准确地在Bing Maps WPF控件中绘制点?
答案 0 :(得分:0)
鉴于您的5720x5720px地图图像涵盖标准Bing地图(或Google地图或OpenStreetMap)坐标范围经度= -180..180 且纬度= -85.0511..85.0511 < / strong>,根据墨卡托投影,以下方法将从图像像素坐标转换为纬度/经度:
public static void PixelXYToLatLon(
double pixelX, double pixelY, out double latitude, out double longitude)
{
var imageSize = 5720d;
var maxLatitude = 85.05112878; // = Math.Atan(Math.Sinh(Math.PI)) / Math.PI * 180d;
var y = (0.5 - pixelY / imageSize) * (2d * maxLatitude);
latitude = Math.Atan(Math.Sinh(y * Math.PI / 180d)) / Math.PI * 180d;
longitude = (pixelX / imageSize - 0.5) * 360d;
}
imageSize变量当然也可以是方法参数。
答案 1 :(得分:0)
如果您使用MapTiler(http://www.maptiler.com)创建切片,您有两种方法可以实现您想要的效果:
A)使用Lat / Lon坐标将您的游戏地图映射到人造世界
在这种情况下,您将世界坐标映射到像素坐标。瓷砖必须以正确的方式准备,与真实世界地图相同。
要使用MapTiler创建切片,您应该按照以下步骤操作:
使用此方法,您可以在Bing Maps WPF控件中加载切片,并使用Lat / Lon坐标定位标记或其他数据。 点[0,0]将成为图像的中心,您可以适当地计算其他纬度/经度坐标。 在页面上查看此页面和源代码: http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/ 如果需要,页面中嵌入的globalmaptiles.py代码可以使用不同语言,包括C#(。cs)。它已被我们的代码中的其他人移植。
B)保持光栅坐标
一种不同的方法 - 您可以在输入文件的原始栅格坐标中创建地图图块。没有Lat / Lon,坐标系以像素为单位,您也可以在像素坐标中绘制标记和多边形。 MapTiler为您提供Leaflet和OpenLayers中的示例JavaScript查看器。其他观看者你必须修补自己使用像素坐标。要生成图块,只需选择&#34;光栅图块&#34; - 如本教程中所述:http://youtu.be/9iYKmRsGoxg?list=PLGHe6Moaz52PiQd1mO-S9QrCjqSn1v-ay 我希望使用Photoshop插件制作的瓷砖与使用MapTiler制作的光栅坐标类似。