.net - 给定缩放级别,将long/lat转换为像素x/y

标签 .net google-maps maps coordinates pixel

我正在尝试在ASP.NET中开发一个页面,该页面将充当Google Map的图块服务器

它将从数据库中提取一组纬度/经度点,然后将其显示为透明背景上的小红点(给定缩放级别)(默认值:15)。

然后它将结果返回为GIF类型的图像。

是否开发了允许我采用这组纬度/经度并将其转换为给定缩放级别的一组2D像素坐标的算法或库?

(这都是在服务器端完成的,因此我无法使用Google Maps API。)

更新:在Perl中找到一个执行类似操作的代码示例:

http://blog.barros.ws/2009/03/06/convert-lat-lng-and-zoom-values-to-pixel-xy-on-a-map/

麻烦的是,我不了解Perl,也没有足够的时间来破解一本书并学习它。

谁能帮助我破译此功能中发生的事情吗?

sub Google_Coord_to_Pix
{
    my $value   = shift ;
    my $lat = shift ;
    my $lng = shift ;
    my @d       = ( ) ; 
    my $e       = 0 ;

    $d[1] = sprintf("%0.0f", $$value{'bmO'} + $lng * $$value{'pixLngDeg'} ) ;

    $e = sin($lat * $$value{'Wa'}) ;

    if( $e > 0.99999 )
    {
        $e = 0.99999 ;
    }

    if( $e < -0.99999 )
    {
        $e = -0.99999 ;
    }

    $d[0] = sprintf("%0.0f", $$value{'bmO'} + 0.5 * log((1 + $e) / (1 - $e)) * (-1) * $$value{'pixLngRad'} ) ;

    return (@d) ;
}

最佳答案

“如果是墨卡托投影,则不必担心地球的曲率,因为所有纬度/经度线的间距都相等”

也许您正在考虑“地理”投影(又名Plate Carree)?墨卡托投影确实具有等距的经度线,但没有等距的纬度线(lat = atan(sinh(y)),因此90°为无穷大)。

顺便说一句,墨卡托投影在球体上的数学运算为here,但是如果Google Maps使用的是WGS84椭球,则需要精确地将其变得更复杂。在这种情况下,我要看看this,但要注意:这不是为了胆小的人。

关于.net - 给定缩放级别,将long/lat转换为像素x/y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1591902/

相关文章:

javascript - Json参数转换继承Web api 2

c# - 检测受密码保护的文档

c# - CF 2.0 List<T>.Sort 上的 MethodAccessException

javascript - React Native Maps - 自定义标记图像不在更高的 Android 版本中呈现

javascript - 如何一遍又一遍地迭代数组,同时将其每个值分配给 DOM 中的所有 svgs

c# - c# 中最少代码的无限循环示例

c# - Gmap.Net 标记在不正确的位置,但本地图缩放时,标记会转到正确的位置

javascript - 如何从DIV中获取js对象?

Java - 如何循环遍历 map 寻找另一个类的实例

android - 使用 Mapsforge 绘制 OverlayWays