【问题标题】:Can I reset latlng coordinates for a custom map type?我可以为自定义地图类型重置 latlng 坐标吗?
【发布时间】:2012-06-25 15:25:25
【问题描述】:

我使用 google maps api 制作了自己的地图。它是一种基于非常大的图像的自定义地图类型。

无论如何我可以重置 latlng 坐标,使它们相对于我的图像,而不是地球的默认 latlng 坐标?

I.E.使图像的左上角 (0,0)。

谢谢。

【问题讨论】:

    标签: google-maps google-maps-api-3


    【解决方案1】:

    是的,您可以使用自己的custom projection definitions。我用一个简单的投影修改了这个lunar surface example,将左上角设为(0,0),右下角设为(50,50)。您很可能需要更改这些值才能使用您的应用。

    我玩了一些限制,看起来仍然有一个硬限制,即纬度 +/- 90 和经度 +/- 180。经度将以 180 度环绕。也就是说,似乎不可能定义自定义坐标,例如 (100, 200)。

    在此处查看修改后的月球表面演示,单击任意位置以在警报中显示自定义 latLng:

    http://jsfiddle.net/yV6xv/79/

    function percentProjection() {};
    
    percentProjection.prototype.fromLatLngToPoint = function(latlng) {
        // pixel size of tile at zoom 0
        var max = 256;
    
        // define bottom-right corner as (50, 50)
        var x = max * latlng.lng() / 50;
        var y = max * latlng.lat() / 50;
        return new google.maps.Point(x, y);
    };
    
    percentProjection.prototype.fromPointToLatLng = function(pixel) {
        // inverse conversion
        var max = 256;
        var lng = pixel.x / max * 50;
        var lat = pixel.y / max * 50;
        return new google.maps.LatLng(lat, lng);
    };
    

    【讨论】:

    • 非常感谢!我很欣赏清晰而全面的答案。
    • 我已经实现了你的代码,以及来自 jsfiddle 的代码:moonMapType.projection = new percentProjection(); 但是,它似乎没有生效,我还需要添加什么才能让它工作吗?我也需要 0 的 minZoom 吗?谢谢
    • 您是否将投影与mapTypesmapTypeId 选项相关联(在 jsfiddle 中的 initialize 内部看到)?我将不得不做更多的测试,看看是否最小。缩放很重要,但我认为它不应该。
    • 一切正常,但现在我的地图没有加载,标记也没有。我已经回滚了,现在正试图弄清楚我需要做什么。会及时通知您。
    • 我用谷歌月球图像尝试了你的粘贴箱,似乎对我有用。我注意到 initialize 缺少一个 } 大括号(应该在 function getNormalizedCoord 之前添加,还要记住在新坐标中可见范围将介于 (0,0) 和 (50,50) 之间,因此请更改起始地图center 到中间 (25,25) 或可见范围内的某个位置。补充:尝试查看 JavaScript 控制台或输出 getTileUrl 函数的结果并确保结果是您的图像所在的位置。比较最新的代码到以前工作的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 2018-06-10
    • 2019-07-16
    • 2020-03-05
    相关资源
    最近更新 更多