使用 Turf.nearPoint() 时应该使用什么样的点? Turf.nearestPoint() 的文档似乎不正确
When using Turf.nearPoint() what kind of point should be used? Documentation for the Turf.nearestPoint() does not seem correct
我放在这里的任何代码都是我必须从另一个系统转录的东西,所以我没有简单的方法来只 post 我的代码。如果有,我会 post 整个该死的项目。
我试图在我们的项目中实施此 https://turfjs.org/docs/#nearestPoint,但我不断收到错误消息。
TS2345: Arguments of type 'FeatureCollection < Geometry | GeometryCollection, {[name:string]: any; } is not assignable to parameter of type 'FeatureCollection < Point, {[name:string]: any;} > '
Type Geometry is not assignable to type Point Type of property type are incompatible Type string is not assignable to type Point
我看到了这个post
在 post 中有
map.on('click', function(e) {
var coord = e.latlng;
var lat = coord.lat;
var lng = coord.lng;
var targetPoint = turf.point([lng, lat]);
var nearest = turf.nearestPoint(targetPoint, points);
alert(JSON.stringify(nearest));
});
在我的代码中我是
使用鼠标点击事件
通过 turf.point([lng, lat]}
创建一个 selectPoint
从点数组中创建我的点 我也通过相同的 turf.point([lng, lat]) 方法
但是总是出现上面提到的 TS 错误。
此外,Turf 页面上的文档指出 targetPoint 是一个 Coord,但其他 posters 代码有一个 Turf.point,它是一个 Feature
参数
Argument------Type------Description
targetPoint----Coord-----the reference point
points------FeatureCollection< Point >------against input point set
经过 8 个多小时的努力,我已经没有头发可拔了,我怀疑我今天所做的一切。
有人可以提供帮助或只是指出一些实际起作用并且没有仅供已经熟悉该技术的人使用的神秘评论的东西吗?
你考虑过Leaflet.GeometryUtil吗?
假设你的点是标记 (L.Marker):
map.on('click', function (e) {
var layersToSearch = [];
map.eachLayer(layer => {
if (layer instanceof L.Marker) {
layersToSearch.push(layer);}
})
nearestLayer = L.GeometryUtil.closestLayer(map, layersToSearch, e.latlng);
nearestLayer.layer.bindPopup('Nearest Point').openPopup();
});
只是为了帮助那些可能正在为此苦苦挣扎的其他人。
import * as Turf from '@turf/turf';
private handleClickEvent(e: Leaflet.LeafletEvent) {
const latLng: Leaflet.LatLng = e.latlng;
// Note in Turf it is backwards longitude, latitude where normally its lat, lng
let mapClickLocation: Feature<Point> = Turf.point( [latLng.lng, latLng.lat] );
let allYourGeoPoints: Array<Feature<Point>> = [];
// Values you'd set in the allYourGeoPoints e.g.
allYourGeoPoints.push(Turf.point([lng, lat], {'id': idOfYourRecord});
// Create a collection of points usable by Turf
let collectionOfPoints: FeatureCollection<Point> = Turf.featureCollection(allYourGeoPoints);
// Now find the nearest item
let nearestPointFound: NearestPoint = Turf.nearestPoint(mapClickLocation, collectionOfPoints);
}
我放在这里的任何代码都是我必须从另一个系统转录的东西,所以我没有简单的方法来只 post 我的代码。如果有,我会 post 整个该死的项目。
我试图在我们的项目中实施此 https://turfjs.org/docs/#nearestPoint,但我不断收到错误消息。
TS2345: Arguments of type 'FeatureCollection < Geometry | GeometryCollection, {[name:string]: any; } is not assignable to parameter of type 'FeatureCollection < Point, {[name:string]: any;} > '
Type Geometry is not assignable to type Point Type of property type are incompatible Type string is not assignable to type Point
我看到了这个post
map.on('click', function(e) {
var coord = e.latlng;
var lat = coord.lat;
var lng = coord.lng;
var targetPoint = turf.point([lng, lat]);
var nearest = turf.nearestPoint(targetPoint, points);
alert(JSON.stringify(nearest));
});
在我的代码中我是
使用鼠标点击事件 通过 turf.point([lng, lat]}
创建一个 selectPoint从点数组中创建我的点 我也通过相同的 turf.point([lng, lat]) 方法
但是总是出现上面提到的 TS 错误。
此外,Turf 页面上的文档指出 targetPoint 是一个 Coord,但其他 posters 代码有一个 Turf.point,它是一个 Feature
参数
Argument------Type------Description
targetPoint----Coord-----the reference point
points------FeatureCollection< Point >------against input point set
经过 8 个多小时的努力,我已经没有头发可拔了,我怀疑我今天所做的一切。
有人可以提供帮助或只是指出一些实际起作用并且没有仅供已经熟悉该技术的人使用的神秘评论的东西吗?
你考虑过Leaflet.GeometryUtil吗?
假设你的点是标记 (L.Marker):
map.on('click', function (e) {
var layersToSearch = [];
map.eachLayer(layer => {
if (layer instanceof L.Marker) {
layersToSearch.push(layer);}
})
nearestLayer = L.GeometryUtil.closestLayer(map, layersToSearch, e.latlng);
nearestLayer.layer.bindPopup('Nearest Point').openPopup();
});
只是为了帮助那些可能正在为此苦苦挣扎的其他人。
import * as Turf from '@turf/turf';
private handleClickEvent(e: Leaflet.LeafletEvent) {
const latLng: Leaflet.LatLng = e.latlng;
// Note in Turf it is backwards longitude, latitude where normally its lat, lng
let mapClickLocation: Feature<Point> = Turf.point( [latLng.lng, latLng.lat] );
let allYourGeoPoints: Array<Feature<Point>> = [];
// Values you'd set in the allYourGeoPoints e.g.
allYourGeoPoints.push(Turf.point([lng, lat], {'id': idOfYourRecord});
// Create a collection of points usable by Turf
let collectionOfPoints: FeatureCollection<Point> = Turf.featureCollection(allYourGeoPoints);
// Now find the nearest item
let nearestPointFound: NearestPoint = Turf.nearestPoint(mapClickLocation, collectionOfPoints);
}