使用VB.NET在墨卡托投影上相对于坐标的X、Y位置不正确

使用VB.NET在墨卡托投影上相对于坐标的X、Y位置不正确,.net,vb.net,maps,mercator,.net,Vb.net,Maps,Mercator,我最近写了一个函数,从坐标中获取墨卡托投影地图上的相对点 我使用的地图是一个未缩放的svg 当SVG在PictureBox中呈现为位图时,此代码和函数将获得SVG的相对点。问题是函数输出的点与我期望的不匹配 在下面的SVG位图图像中,我标记了一个绿色的点,我希望它得到的是点,而红色的点,函数实际给出的是点 我编写这段代码是为了从SVG的经度和纬度获取SVG的相对点 Private Sub fs_Load(sender As Object, e As EventArgs) Handles

我最近写了一个函数,从坐标中获取墨卡托投影地图上的相对点

我使用的地图是一个未缩放的
svg

当SVG在
PictureBox
中呈现为位图时,此代码和函数将获得SVG的相对点。问题是函数输出的点与我期望的不匹配

在下面的
SVG
位图图像中,我标记了一个绿色的点,我希望它得到的是点,而红色的点,函数实际给出的是点

我编写这段代码是为了从SVG的经度和纬度获取SVG的相对点

   Private Sub fs_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        MsgBox(ConvertGeoToPixel(35.652832, 139.839478, 450, 530, 123.658963, 145.820743, 24.217586).ToString())

    End Sub

    Private Function ConvertGeoToPixel(ByVal latitude As Double, ByVal longitude As Double, ByVal imageWidth As Integer, ByVal imageHeight As Integer, ByVal mapLonLeft As Double, ByVal mapLonRight As Double, ByVal mapLatBottom As Double) As Point
        Dim mapLatBottomRad As Double = mapLatBottom * Math.PI / 180
        Dim latitudeRad As Double = latitude * Math.PI / 180
        Dim mapLonDelta As Double = mapLonRight - mapLonLeft
        Dim worldMapWidth As Double = (imageWidth / mapLonDelta * 360) / (2 * Math.PI)
        Dim mapOffsetY As Double = worldMapWidth / 2 * Math.Log((1 + Math.Sin(mapLatBottomRad)) / (1 - Math.Sin(mapLatBottomRad)))
        Dim x As Double = (longitude - mapLonLeft) * (imageWidth / mapLonDelta)
        Dim y As Double = imageHeight - ((worldMapWidth / 2 * Math.Log((1 + Math.Sin(latitudeRad)) / (1 - Math.Sin(latitudeRad)))) - mapOffsetY)
        Return New Point() With {
            .X = Convert.ToInt32(x),
            .Y = Convert.ToInt32(y)
        }
    End Function
我知道地图的宽度是450,高度是530。我还知道,如果不放大,地图的左经度是
123.658963
,最高纬度是
45.523885
,右经度是
145.820743
,最低纬度是
24.217586
。这些信息包含在我下载SVG地图的源代码中。我将这些信息合并到SVG中

此功能的输出非常关闭(如图所示)为:

{X=329,Y=261}

这是非常糟糕的


我不知道发生了什么事。如何解决此问题?

此转换是直线转换。已经在SVG中为您完成了纬度的经度调整。只需计算纬度和经度的刻度和偏移量。

能否附上一个工作示例?你的意思是我可以将渲染图像的宽度或高度之间的长度除以@xpda之间的像素量吗?