问题标签 [mercator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
bing-maps - 使用四键检索给定半径内的所有点
我是 GIS 概念的新手,我正在学习 Quadkeys 和用法。
我正在将其四键插入几个点到数据库中,并希望使用四键检索给定半径内的所有点。
假设我有一个点(46,46),其缩放级别 23 上的四键是 12122022101301320022121(使用此链接)
现在我想搜索 DB 中距离参考点 100 公里半径的所有点,比如 (47,47)
我的想法是,使用给定的距离(100 公里)找到缩放级别,形成具有该级别的 (47,47) 的四键,并使用此键查询数据库以检索具有给定前缀的所有键。
网络上的任何参考都只提供 Tile 到 Quad 之间的转换,反之亦然。
如何有效地计算这个缩放级别?这是正确的做法吗?或者有没有更好的方法来使用四键来处理这个问题。
python - 如何使用 Bokeh Server << require("core/util/projections") >>?
如果我在 jupyter 实验室上运行这个例子就可以了
但是,如果我使用散景服务运行示例,我会收到错误消息Uncaught Error: Cannot find module 'core/util/projections'
我错过了什么吗?require
运行脚本时是否需要调整调用bokeh serve
?我在示例文件夹中没有看到任何带有散景服务的示例
我的版本
10月9日更新
实际上,我已经从zip 版本编译并安装了 Bokeh 。我收到 404 错误,因为 js 文件的 url 是 url 与本地路径的串联
恐怕我在散景安装过程中做错了什么。我已遵循本指南
我正在使用 Windows 10
10月10日更新
感谢@Torus,我已经设置BOKEH_RESOURCES=server-dev
了环境变量,但也找不到该模块。
有关其他信息:我已经安装了散景:
我已经设置了这个环境变量:
但是我仍然遇到同样的错误,找不到模块:
结论
我认为手动构建散景时有问题,因为如果我以通常的方式安装它:pip install bokeh
,当我做的时候require("core/util/projections")
工作正常。
还有另一种方法可以将坐标转换为“墨卡托投影”吗?我应该创建另一个 CDS 列并在 python 中进行转换吗?
d3.js - 使用 D3.js、Leaflet 或 Mapbox 用墨卡托地图包裹大圆圈
简而言之,问题是:如何使用Google Maps API 以外的其他工具在墨卡托中准确地投影一个环绕的大圆半径?
问题很长:
所以我有一个难题。我运行了一个地图应用程序,它使用 Google Maps API 将巨大的圆圈投影到墨卡托地图上——它试图显示非常大、精确的半径,例如,大约 13,000 公里。但我不想再使用 Google Maps API,因为 Google 的新定价方案太疯狂了。因此,我试图将代码转换为 Leaflet、Mapbox 或任何非 Google 的东西,没有任何东西可以正确处理这些圆圈。
以下是 Google Maps API 如何处理以非洲北部为中心、半径为 13,000 公里的测地圆:
这在直觉上看起来很奇怪,但却是正确的。波浪形图案是由环绕地球的圆圈引起的。
D3.js 可以在正交投影中正确渲染它。所以这是在 D3.js 中使用 d3.geo.circle() 在地球上渲染的同一个圆圈,旋转两次:
这使得 2D-“波浪”模式更有意义,对吧?对。我喜欢它。完全适用于我的科学传播等目的。
但是当我将代码转换为 Leaflet 时,它根本不起作用。为什么?因为 Leaflet 的 circle 类根本就不是一个大圆。相反,它似乎只是一个随着纬度有点扭曲的椭圆,但不是以真正的测地线方式。相同的圆,相同的半径,相同的原点,我们得到:
大错特错,大错特错!除了看起来完全不切实际之外,这是不正确的——澳大利亚不会在这样的圆形半径内。这对我的申请很重要!这是不行的。
好吧,我想,也许诀窍就是尝试实现我自己的大圆圈类。我采用的方法是将圆点作为距原点的距离进行迭代,但是使用这个非常有用的网站上的“目标点给定距离和距起点的方位”计算来计算距离,然后将它们投影为多边形传单。这是我得到的结果:
这看起来很糟糕,但实际上更接近准确!我们得到了波浪效应,这是正确的。像我一样,你可能会问,“这里到底发生了什么?” 所以我做了一个版本,让我可以突出每个迭代点:
你可以很清楚地看到它正确地渲染了圆,但是多边形错误地加入了它。它应该做的(人们可能会天真地认为)是将波浪形包裹在墨卡托地图投影的多个实例周围,而不是天真地将它们连接在顶部,而是将它们连接成球形。就像这个粗糙的 Photoshop 渲染一样:
然后多边形将以某种方式“关闭”,表明多边形上方的所有内容也都包含在其中。
不过,我不知道如何在 Leaflet 中实现这样的东西。或其他任何事情。考虑到缩放状态,也许我必须自己处理原始 SVG?或者其他的东西?在我进入那些危险的杂草之前,我想我会征求任何建议/想法/等。也许有一些更明显的方法。
哦,我尝试了另一件事:使用相同的 d3.geo.circle 构造函数,该构造函数在墨卡托/传单投影的正交投影中效果很好。它产生的结果或多或少与我的“天真”传单大圆实现相同:
我猜这是有希望的。但是,如果您移动原点的经度,D3.js 版本会以一种更奇怪的方式包装(D3.js 为红色,我的 Leaflet 类为青绿色):
如果 D3.js 中有某种方法可以改变它的工作方式,我不会感到惊讶,但我还没有完全进入 D3.js 的兔子洞。我希望 D3.js 能让这个“更容易”(因为它是比 Leaflet 更完整的制图工具),所以我会继续研究这个。
我还没有尝试在 Mapbox-gl 中执行此操作(我想这是“尝试”列表中的下一个)。
反正。谢谢阅读。重申这个问题:如何使用Google Maps API 以外的其他工具在墨卡托中准确地投影一个环绕的大圆半径?
grid - 整个星球的 Openstreetmap 矩形网格
我正在尝试为整个世界生成矩形网格,单元格大小为 350 米(宽度和高度相等)。
我试图做的事情:
1) 在主循环中迭代 [-180 范围内的槽经度;180]
2) 在嵌套循环中迭代 [-85.06 范围内的低谷纬度;85.06](Web 墨卡托边界)
3) 使用 Java GeographicLib Geodesic.WGS84.Direct()在东(在主循环中)和北(在嵌套循环中)增加绑定到 350 米的单元格。
Java代码:
结果,产生了约 5.3 亿个细胞。然而,整个星球的面积约为 5.1 亿平方公里。所以,细胞总数应该是40亿左右。我对测地线数学很陌生,所以出了什么问题?我应该怎么做才能正确生成这个网格?
geolocation - 在缩放的墨卡托投影上将屏幕坐标转换为纬度/经度的方程式是什么?
我想了解在缩放的墨卡托投影上将 2D 坐标转换为实际纬度所涉及的所有步骤。地图以二维矩形显示。
我知道矩形的中心纬度和纬度/经度增量值。我也知道矩形的像素长度和高度。如果我知道这些值,将 x/y 坐标转换为纬度和经度的方程式是什么?把地球当作一个完美的球体。
netcdf - 有没有办法使用 Web 界面在 shapefile 上显示 grib2 或 netcdf 数据?
我想在给定的 shapefile 上显示一些天气数据。我正在检查是否可以使用 mapshaper 或 web mercator,但没有找到合适的程序。非常感谢任何帮助。
mapbox - Mapbox GL JS ImageSource 坐标错误
我正在努力将图像正确定位到我的地图上。我正在为我的(实时)图像使用以下 URL 之一:
这些是相关的 WMS 功能:https ://maps.dwd.de/geoserver/ows?service=wms&version=1.3.0&request=GetCapabilities
我尝试根据此示例添加图像源。使用这些坐标:
问题是图像没有 100% 正确对齐,而是略微移动/拉伸。我使用墨卡托投影阅读了有关 Mapbox 的一些内容,但无法处理其他内容?这就是为什么上面有三个不同的 URL,但它们都失败了。接下来我尝试像这样转换我的坐标:
然而,这也没有正确对齐图像。我想,我使用了错误的坐标。知道怎么做吗?
太感谢了。
下面是可以玩的代码(请将雷达盲点(灰色)的位置与下图进行比较以查看偏移量):js fiddle
typescript - 将地理位置转换为墨卡托投影图像上的像素
我正在创建一个应用程序,允许用户指定地理位置数据,然后将其作为节点渲染到矢量墨卡托投影矢量图像上。
所以我买了以下墨卡托投影矢量图像: https ://www.vectorstock.com/royalty-free-vector/world-map-gray-mercator-projection-lasercut-vector-23277786
我从以下文章中找到了将地理位置数据转换为像素的公式: 将纬度/经度点转换为墨卡托投影上的像素 (x,y)
但是,转换不正确,我认为它与我使用的图像有关,而不是像示例中使用的那样的“普通”墨卡托地图(85 度)。
因此,我的问题是:有没有办法通过提供的图像实现我想要的?如果是的话,我想对下面提供的代码有所帮助。如果没有,如果您可以提供一个与所提供的具有相同风格的图像(矢量、免费或出售)的 URL,我真的会很高兴。
非常感谢!
xml - 如果在 EPSG25832-projection 方法中给定图像,如何从 lat,long 计算 x,y-tile-坐标?
我有一个关于创建 WMTS 服务器请求以及计算图块编号的问题。
从这个德国政府网站,我可以获得他们 WMTS 服务器的地址:https ://www.wmts.nrw.de/geobasis/wmts_nw_dop 。我可以成功地将它作为图像层集成到 josm 中(wmts:https ://www.wmts.nrw.de/geobasis/wmts_nw_dop )并且它可以正确显示。
我可以在终端中查看 josm 发出的服务器请求,类似于:2019-09-26 18:54:31.651 INFO: GET https://www.wmts.nrw.de/geobasis/wmts_nw_dop/tiles/nw_dop/EPSG_25832_16/16/17680/35107 -> HTTP_1 200 (13.3 kB)
您可以查看此图块图像:https ://www.wmts.nrw.de/geobasis/wmts_nw_dop/tiles/nw_dop/EPSG_25832_16/16/17680 /35107
在这个rviz-plugin中,我输入了请求的字符串:https://www.wmts.nrw.de/geobasis/wmts_nw_dop/tiles/nw_dop/EPSG_25832_16/{z}/{y}/{x}
如果我让 rviz_satellite 找出 y 和 x,我会在 rviz 中得到垃圾:
我认为这是因为图像/图块采用 EPSG25832-projection 方法,但 rviz-satellite 采用 Mercator-projection 方法。而且我需要将图像放在 EPSG25832 中,因为会显示其他数据。
如果您查看地图服务器的 WMTSCapabilities.xml,您可以看到最高缩放级别为 16 的图像和其他信息:https ://www.wmts.nrw.de/geobasis/wmts_nw_dop/tiles/nw_dop/EPSG_25832_16 /1.0.0/WMTSCapabilities.xml
我查看了 rviz-satellite 似乎用来计算 x 和 y 的方法,如下所示:
但我认为我需要做这样的事情,因为 EPSG25832/UTM 投影: https ://en.wikipedia.org/wiki/Transverse_Mercator_projection
我已经查看了https://josm.openstreetmap.de/doc/org/openstreetmap/gui/jmapviewer/Tile.htm以了解 openstreetmap 是如何做到的,但我什么也没找到。
总而言之:如果在 EPSG25832 投影方法中给定图像(josm/osm 成功),如何从 lat,long 计算 x,y-tile-coordinates?
python - 使用墨卡托投影:我只想为土地/国家着色,所有土地(南极洲除外)加上所有海洋都被着色
此代码来自 Basemap 文档页面,其中一些更改集中在我手头的问题上。我想为所有陆地(可以忽略南极洲)着色(在这种情况下为洋红色),并且所有海洋都应该像现在的南极洲一样是白色的。shapefile 来自这里