使用 D3.js 和 GeoJson 在某些坐标的地图上设置小图像

Setting a small image on map on some coordinates using D3.js and GeoJson

我想比较用户给的一些坐标和geojson文件中的坐标,如果条件成立那么我想在坐标定义的那个位置画一个小圆图(真的很小比如符号之类的)。我必须在 d3.json 方法中写什么才能从 geojson 文件访问坐标、比较它并在其上绘制图像? 任何帮助将不胜感激。

这是我的 geojson 文件的一小部分

{
"type": "FeatureCollection",
"features": [
{ "type": "Feature", "properties": {}, "id":"Andhra Pradesh", "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 80.149167, 13.618300 ], [ 80.142031, 13.544708 ], [ 80.126421, 13.584849 ], [ 80.158087, 13.591093 ], [ 80.120622, 13.605812 ], [ 80.149167, 13.618300 ] ] ], [ [ [ 82.258801, 16.689980 ], [ 82.285562, 16.697563 ], [ 82.368074, 16.723877 ], [ 82.311876, 16.602562 ], [ 82.258801, 16.689980 ] ] ],

我相信您需要另一个数据集来满足您的需求。 geometry 集合中的这些坐标用于绘制路径。请参阅文档:

http://geojson.org/geojson-spec.html#geometry-objects

换句话说,这些只是您在地图上看到的 "lines"(边界)的坐标。我相信您想比较每个州(路径) 内的位置坐标,例如城市或其他 POI,对吗?

在那种情况下,你有两个选择:你可以根据用户给定的坐标轻松地画一个圆或其他任何东西,或者如果这些坐标是城市,你可以搜索另一个 JSON 文件这些城市的地理数据,并将用户的输入与这些坐标进行比较。

一旦你有了这些坐标(我们称它们为 longitudelatitude),你可以像这样绘制它们:

svg.append("circle")
    .attr("cx", function() {
        return projection(longitude);
    })
    .attr("cy", function(d) {
        return projection(latitude);
    })
    .attr("r", whatever)
    .style("fill", whatever);

svg 是您用来附加 SVG 的变量,projection 是您用来设置投影的变量。