代码之家  ›  专栏  ›  技术社区  ›  tone

如何将EPSG4326点投影到传单默认值

  •  2
  • tone  · 技术社区  · 7 年前

    我使用的是澳大利亚政府地图数据: Victoria, Australia locality data ,在EPSG4326投影中提供。

    当然,当我尝试将数据与传单一起使用时,由于地球的曲率,我的数据有点失真,因此我的数据无法在屏幕上正确显示,因为地图使用了与我的数据不同的投影。

    我试图通过在地图选项和瓷砖层中设置来强制地图使用EPSG4326,如下所示:

    var gisLayer = L.tileLayer(
      'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
        //subdomains: ['0', '1', '2', '3'],
        attribution: 'openstreetmap',
        reuseTiles: true,
        updateWhenIdle: false,
        crs: L.CRS.EPSG4326
    });
    
    var map = L.map('map', {
      center: [-28.5, 135.575],
      zoom: 4
      ,crs: L.CRS.EPSG4326
    });
    
    map.addLayer(gisLayer);
    

    但当我这样做时,地图不会显示。我不相信已经为这个投影生成了地图块。也就是说,docos中有一个建议 here 这可能是可能的,但我无法让它工作。(我刚才是不是配置错了?)

    当我检索数据并将其放置在地图上时,它似乎正在工作,但当我获得地图边界以选择可见区域的数据时,它也显示出扭曲。因此,我尝试手动将地图边界转换为EPSG4326,以将其传递到数据库,如下所示:

    var bounds = map.getBounds();
    var coords4326_NE = L.Projection.SphericalMercator.unproject(bounds._northEast);
    console.log(coords4326_NE);
    

    但这打破了密码。我传递了错误的结构,我也不能得到这个权利。

    当然,我也会接受将从数据库返回的每个点转换为默认投影,我认为是EPSG3857。但我也在做这件事。

    我作为JSFIDLE提供 here 我一直在尝试这样做。

    有人知道我如何做到这一点吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   ghybs    7 年前

    GeoJSON数据编码在WGS84中,可以简单地绘制在EPSG4326上,但也是EPSG3857的预期输入( Web Mercator ).

    来自维基百科的那篇文章:

    虽然万维网墨卡托公式适用于墨卡托的球形,但地理坐标必须位于WGS 84椭球面基准中。

    因此,您无需更改任何内容即可将数据绘制到 有规律的 传单地图,使用 有规律的 瓷砖(来自OSM或Mapbox,仅为EPSG3857提供瓷砖)。

    Screenshot of OP's data onto a regular Leaflet map