图纸地图应用程序坐标 WGS84
本文关键字:坐标 WGS84 应用程序 地图 | 更新日期: 2023-09-27 17:55:12
如何处理大的WGS84点坐标?
我认为,我能做的,是将世界(WGS84)点转换为屏幕上的点(以像素为单位)。这是一个好方法吗?它仍然不能正常工作,因为需要大变焦,我将不得不将单位从米更改为毫米(但是如何?只是将点的 x 和 y 相乘?
对于这个映射问题,这是一个非常简单的方法。地理学家可能会为此哭泣,但只要坐标低于纬度约70°并且窗口的大小不太大,它在实践中效果很好。此外,不要尝试仅使用大型对象(如很长的线)的起点和终点直接映射这些对象。
public PointF GeoCoordToPixel(IGeographicPosition geoPos)
{
double tempLong = geoPos.Longitude;
if (tempLong > CenterPos.Longitude && (tempLong - CenterPos.Longitude) > 180)
{
// the position is to the left, over the antimeridian
tempLong = tempLong - 360;
}
if (tempLong < CenterPos.Longitude && (CenterPos.Longitude - tempLong) > 180)
{
// the position is to the right, over the antimeridian
tempLong = tempLong + 360;
}
PointF pt = new PointF(
(float)((tempLong - LongitudeOfOrigin) / LongitudeIncrement),
(float)((-geoPos.Latitude + LatitudeOfOrigin) / LatitudeIncrement));
return pt;
}
与中心位置 = 窗口中心;原点纬度/原点经度=窗口的左上角位置;经度增量/纬度增量 = 视图比例。它们的关系是:
LatitudeOfOrigin = CenterPos.Latitude + (m_drawingBuffer.Height / 2.0 * LatitudeIncrement);
LongitudeOfOrigin = CenterPos.Longitude - (m_drawingBuffer.Width / 2.0 * LongitudeIncrement);
反之亦然:
public CGeographicPosition PixelToGeoCoord(PointF pt)
{
double latitude = -(pt.Y * LatitudeIncrement) + LatitudeOfOrigin;
double longitude = (pt.X * LongitudeIncrement) + LongitudeOfOrigin;
if (longitude > 180)
{
longitude -= 360;
}
return (new CGeographicPosition(latitude, longitude, 0));
}
不是很困难,是吗?