【问题标题】:Return Title of Closest Feature (json) Polygon using Leaflet JS使用 Leaflet JS 返回最近特征(json)多边形的标题
【发布时间】:2014-06-19 23:42:55
【问题描述】:

我有四个 json 格式的轮廓(特征),在传单地图上显示为多边形。目前,我在单击 L.Control.Locate 箭头时显示我的当前位置。它显示我靠近多边形,但是,我想知道我离哪个多边形(按标题)最近,并有一个警报或至少一个变量告诉我最近的标题。

使用 Next Nearest https://github.com/mapbox/leaflet-knn,我不清楚如何获得最近的点。我创建了一个小函数:

function nearBy(latlng){
    //does nearBy() have the latlng? This does show me the latlng of the user
    alert(latlng);
    //pass in all the data
    var gj = L.geoJson(GEOJSON_DATA);
    //do the knn magics
    var index = leafletKnn(gj).nearest(L.latLng(latlng), 5);
    //show me something
    alert(index);
}

alert(index) 正在喷涌而出:[object Object],[object Object],[object Object],[object Object],[object Object]

...这很好,因为它表明存在某些东西,但是,除此之外我什么也得不到。

有人像我一样使用leaflet-knn吗?

... 编辑 ... json 看起来像这样(下面不完整):

{ "type": "Feature", "properties": { "Name": "<a href='framework/index.html'><h3>Conecuh National Forest</h3></a>", "description": "<html xmlns:fo=\"http:\/\/www.w3.org\/1999\/XSL\/Format\" xmlns:msxsl=\"urn:schemas-microsoft-com:xslt\">\n\n<head>\n\n<META http-equiv=\"Content-Type\" content=\"text\/html\">\n\n<meta http-equiv=\"content-type\" content=\"text\/html; charset=UTF-8\">\n\n<\/head>\n\n<body style=\"margin:0px 0px 0px 0px;overflow:auto;background:#FFFFFF;\">\n\n<table style=\"font-family:Arial,Verdana,Times;font-size:12px;text-align:left;width:100%;border-collapse:collapse;padding:3px 3px 3px 3px\">\n\n<tr style=\"text-align:center;font-weight:bold;background:#9CBCE2\">\n\n<td>Conecuh National Forest<\/td>\n\n<\/tr>\n\n<tr>\n\n<td>\n\n<table style=\"font-family:Arial,Verdana,Times;font-size:12px;text-align:left;width:100%;border-spacing:0px; padding:3px 3px 3px 3px\">\n\n<tr>\n\n<td>PROCLAIMEDFORESTID<\/td>\n\n<td>295366010328<\/td>\n\n<\/tr>\n\n<tr bgcolor=\"#D4E4F3\">\n\n<td>FORESTNAME<\/td>\n\n<td>Conecuh National Forest<\/td>\n\n<\/tr>\n\n<tr>\n\n<td>GIS_ACRES<\/td>\n\n<td>171215.333<\/td>\n\n<\/tr>\n\n<tr bgcolor=\"#D4E4F3\">\n\n<td>SHAPE<\/td>\n\n<td>Polygon<\/td>\n\n<\/tr>\n\n<tr>\n\n<td>SHAPE.AREA<\/td>\n\n<td>0.065501<\/td>\n\n<\/tr>\n\n<tr bgcolor=\"#D4E4F3\">\n\n<td>SHAPE.LEN<\/td>\n\n<td>1.596221<\/td>\n\n<\/tr>\n\n<\/table>\n\n<\/td>\n\n<\/tr>\n\n<\/table>\n\n<\/body>\n\n<\/html>", "timestamp": null, "begin": null, "end": null, "altitudeMode": null, "tessellate": 1, "extrude": -1, "visibility": -1, "drawOrder": null, "icon": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -86.399549, 31.205536, 0.0 ], [ -86.407326, 31.205638, 0.0 ], [ -86.409808, 31.205671, 0.0 ], [ -86.413319, 31.205717, 0.0 ], [ -86.414067, 31.205711, 0.0 ], [ -86.418361, 31.205674, 0.0 ], [ -86.429486, 31.20558, 0.0 ], [ -86.429544, 31.198715, 0.0 ], [ -86.429615, 31.190445, 0.0 ], [ -86.429627, 31.185575, 0.0 ], [ -86.429651, 31.175982, 0.0 ], [ -86.430013, 31.175979, 0.0 ], [ -86.430563, 31.175974, 0.0 ], [ -86.432963, 31.175952, 0.0 ], [ -86.433052, 31.175951, 0.0 ], [ -86.433474, 31.175947, 0.0 ], [ -86.433864, 31.175944, 0.0 ]

... 编辑 2 ...

使用 FireBug 和 console.log() 我能够得到结果。 Leaflet-knn 正确返回它们,最接近的 LatLng 为(在我的 json 中) index[0].lat + "," index[0].lon

如果有人有的话,我仍然会喜欢一些“干净”的例子......

【问题讨论】:

    标签: javascript geolocation leaflet


    【解决方案1】:

    使用nearestLayer 而不是nearest:这将返回最近的层而不是最近的点,如文档中所述。

    【讨论】:

    • 我不确定我是否理解其中的区别。如果我得到多边形中最近的点,那和得到最近的图层不一样吗?
    • 也许最近层更快?与整个崩溃点匹配?
    • 如果您想获得一个特征(如本问题的标题所示),那么您应该使用nearestLayer,因为它会返回一个多边形。如果您想要最近的,请使用nearest
    猜你喜欢
    • 2013-05-03
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多