- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试在 Mollweide 投影下使用 d3.js 绘制一个矩形。但是,当我运行以下脚本时,矩形显示为弧形或弯曲矩形。我发现这种行为有些奇怪,因为 Mollweide 投影中的平行线只是直线。有人可以解释一下效果吗?同样的效果在其他纬度和其他投影(甚至 Equirectangular 投影)中也存在。
<!DOCTYPE html>
<head>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script src="https://d3js.org/d3-geo-projection.v1.min.js"></script>
</head>
<body>
</body>
<script type="text/javascript">
var mainSVG = d3.select('body').append('svg').attr('width', 500).attr('height', 500);
var projection = d3.geoMollweide().scale(400).translate([250,750])
var path = d3.geoPath().projection(projection);
d3.json('test.json', function(error, vData) {
var features = vData.features;
mainSVG.selectAll('path')
.data(features)
.enter().append('path')
.attr('d', path)
.style('fill', 'red')
.style('stroke', 'black');
})
</script>
geojson 文件:
{
"type": "FeatureCollection",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
"features": [
{ "type": "Feature", "properties": { "DN": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 7.6, 65.0 ], [ 60.4, 65.0 ], [ 60.4, 63.4 ], [ 7.6, 63.4 ], [ 7.6, 65.0 ] ] ] } }
]
}
和结果图:
最佳答案
D3 路径遵循大弧线,两点之间的距离最短。这两个点位于椭圆体上的三维空间中,因此它们之间的最短路径可能不对应于在投影二维空间中测量的它们之间的最短路径。
举一个极端的例子,假设一个点位于北纬 85°、西经 90°,另一个点位于北纬 85°、东经 90°。尽管处于同一平行线上,但两者之间的最短距离是在北极上空短途旅行。 D3 会将这条线绘制为 map 顶部的两条垂直线(在典型的等距柱状 map 上:赤道在中间,北在顶部),而不是沿 85 度平行线的水平线。
如果您希望在投影平面上的两点之间有明显的直线,请将顶点投影到投影平面(svg 坐标空间)上,并绘制一条连接这些投影点的线。这可以通过创建一个新的 geojson 来完成,其中每对原始 geojson 的纬度、经度都被投影 (projection([x,y])
),然后使用空投影绘制: .attr(d, d3.geoPath(null))
关于javascript - d3.js 矩形特征在 Mollweide 投影中绘制为圆弧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46028587/
我现在搜索了大约一天,但没有在 Javacode 中找到我的问题的任何示例。 我有一张 2000*1400 像素的世界地图,带有“Mollweide”投影。我怎样才能找出 map 中点 (500,30
我正在绘制一些 NETCDF 数据,由 Matplotlib 中的 xarray 使用 Cartopy 包装器进行 map 投影处理。当我生成填充等值线图(contourf)时,我最终在经度零(我的数
我在使用 matplotlib 并将数组投影到 Mollweide 投影时遇到了一些问题。我正在使用 Python 3.6 和 matplotlib 2.0.2 我有一个形状为 (360, 180)
我正在尝试在 Mollweide 投影下使用 d3.js 绘制一个矩形。但是,当我运行以下脚本时,矩形显示为弧形或弯曲矩形。我发现这种行为有些奇怪,因为 Mollweide 投影中的平行线只是直线。有
我想知道是否有一种方法可以仅显示基于 basemap (matplotlib)中的 Mollweide/Hammer 投影的绘图中的感兴趣区域。 我正在尝试将绘图边界大致设置为太平洋板 block ,
我想使用以太平洋地区(特别是澳大利亚)为中心的 Mollweide 投影在 R 中绘制世界地图,使用 rnaturalearth --> sf --> ggplot管道。 我一直遇到在全局范围内连接线
我是一名优秀的程序员,十分优秀!