有没有办法确定nokia.maps.map.Polygon中是否包含经/纬度?
我可以使用nokiaMap.getObjectsAt方法来检查给定地图像素位置下是否存在多边形,但这对纬度和经度没有帮助。
我曾考虑使用一种方法nokiaMap.geoToPixel来获取像素位置,然后调用nokiaMap.getObjectsAt,但是文档指出“可见地图区域之外的结果值可能非常不可靠”,我认为这是案例,因此不能使用这种方法。
nokiaMap.geoToPixel文档
http://developer.here.com/docs/maps_js/topics_api_pub/nokia.maps.map.Display.html#topic-apiref__Display-geoToPixel-method
最佳答案
这需要从计算几何学实现point in polygon算法。下面是一个示例:
nokia.maps.map.Polygon.prototype.containsCoordinate = function(arg) {
var latitude, longitude;
if (arg instanceof nokia.maps.geo.Coordinate){
latitude = arg.latitude;
longitude = arg.longitude;
} else if (arg instanceof Array && arg.length === 2 && !isNaN(arg[0]) && !isNaN(arg[1])){
latitude = arg[0];
longitude = arg[1];
}
// Fail fast if not in the bounding box - don't bother with Ray Cast method
if (!poly.getBoundingBox().contains(
nokia.maps.geo.BoundingBox.coverAll(
[new nokia.maps.geo.Coordinate(latitude, longitude)]))){
return false;
}
var inPoly = false,
path = this.path,
numPoints = path.getLength(),
j = numPoints-1;
for(var i=0; i < numPoints; i++) {
var vertex1 = path.getLatLng(i),
vertex2 = path.getLatLng(j);
if (vertex1[1] < longitude && vertex2[1] >= longitude ||
vertex2[1] < longitude && vertex1[1] >= longitude) {
if (vertex1[0] + (longitude - vertex1[1]) / (vertex2[1] - vertex1[1])
* (vertex2[0] - vertex1[0]) < latitude) {
inPoly = !inPoly;
}
}
j = i;
}
return inPoly;
};
您可以使用
Coordinate
或一对数字来调用它。例如:poly.containsCoordinate(coordinate)
Working Example
关于javascript - 检查经/纬度是否在Nokia HERE Map多边形内,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21138769/