这里是JavaScriptAPI的映射:计算多边形到标记的距离
我在这张地图上画了几个标记和一个多边形对象 我想知道多边形和标记之间的距离。我想弄清楚的是离多边形非常近的标记 这里地图有一个距离函数,但它只用于计算两个标记之间的距离 这是我用来计算距离这里是JavaScriptAPI的映射:计算多边形到标记的距离,javascript,here-api,heremaps,Javascript,Here Api,Heremaps,我在这张地图上画了几个标记和一个多边形对象 我想知道多边形和标记之间的距离。我想弄清楚的是离多边形非常近的标记 这里地图有一个距离函数,但它只用于计算两个标记之间的距离 这是我用来计算距离PaohaIsland.getGeometry().distance(yosmitePark.getGeometry())的函数,其中PaohaIsland是标记对象,yosmitePark是多边形对象 API中没有计算点到多边形距离的方法 为了实现这一点,可以计算从点到多边形外线串每段的距离,然后选择最小的
PaohaIsland.getGeometry().distance(yosmitePark.getGeometry())
的函数,其中PaohaIsland是标记对象,yosmitePark是多边形对象
API中没有计算点到多边形距离的方法 为了实现这一点,可以计算从点到多边形外线串每段的距离,然后选择最小的计算值:
函数距离到地质多边形(地质点,地质多边形){
设lineString=geoPolygon.getExterior(),
心灵距离=无限;
//检查多边形的每个线串段的距离
for(设i=0;i X2 & & Xy1&&yiy2&&yi
测试:
//测试:(结果是14359)
log(distanceToGeoPolygon(lakemclure.getGeometry(),yosmitePark.getGeometry());
注意:上面的脚本也会为多边形内的点返回正数。如果您不想返回正数,可以使用来验证给定的标记对象(必须放置在地图上)是否位于地理多边形内(在您的情况下,我假设您不需要它)
下面是一个工作示例。它在控制台中记录单击标记对象后的距离
var map;
function loadMap(){
platform = new H.service.Platform({
'apikey': HEREMAP_KEY
});
// Obtain the default map types from the platform object:
var defaultLayers = platform.createDefaultLayers();
// Instantiate (and display) a map object:
map = new H.Map(
document.getElementById('mapContainer'),
defaultLayers.vector.normal.map,
{
center: { lat: 37.278419, lng: -119.674072,
pixelRatio: window.devicePixelRatio || 1 },
zoom: 8
}
);
// Enable the event system on the map instance:
var mapEvents = new H.mapevents.MapEvents(map);
var behavior = new H.mapevents.Behavior(mapEvents);
behavior.enable(H.mapevents.Behavior.WHEELZOOM);
}
function addPolygonToMap() {
var lineString2 = new H.geo.LineString();
lineString2.pushPoint({lat:37.278419,lng:-119.674072});
lineString2.pushPoint({lat:37.335224,lng:-119.30603});
lineString2.pushPoint({lat:37.529331,lng:-119.198914});
lineString2.pushPoint({lat:37.522789,lng:-118.99292});
lineString2.pushPoint({lat:37.627281,lng:-118.87207});
lineString2.pushPoint({lat:37.80978,lng:-119.053337});
lineString2.pushPoint({lat:38.01347,lng:-119.143982});
lineString2.pushPoint({lat:37.965851,lng:-119.770203});
lineString2.pushPoint({lat:37.898689,lng:-120.18219});
lineString2.pushPoint({lat:37.867802,lng:-120.341492});
lineString2.pushPoint({lat:37.746819,lng:-120.239861});
lineString2.pushPoint({lat:37.51844,lng:-120.07782});
lineString2.pushPoint({lat:37.278419,lng:-119.674072});
var yosmitePark = new H.map.Polygon(lineString2, {
style: {
strokeColor: '#829',
lineWidth: 8
}
});
map.addObject(yosmitePark);
var lakeMcClure = new H.map.Marker({
lat: 37.6373862,
lng: -120.3448606
});
lakeMcClure.setData("lakeMcClure");
var Stockton = new H.map.Marker({
lat: 37.9729404,
lng: -121.4419639
});
Stockton.setData("Stockton");
var Monolake = new H.map.Marker({
lat: 38.0067483,
lng: -119.1013779
});
Monolake.setData("Monolake");
var PaohaIsland = new H.map.Marker({
lat: 38.000514,
lng: -119.0416587
});
PaohaIsland.setData("PaohaIsland");
var WalkerLake = new H.map.Marker({
lat: 38.7010578,
lng: -118.878652
});
WalkerLake.setData("WalkerLake");
var Bakersfield = new H.map.Marker({
lat: 35.3208963,
lng: -119.1587737
});
Bakersfield.setData("Bakersfield");
var SanFrancisco = new H.map.Marker({
lat: 37.7576793,
lng: -122.5076405
});
SanFrancisco.setData("SanFrancisco");
map.addObjects([lakeMcClure,Stockton,Monolake,PaohaIsland,WalkerLake,Bakersfield,SanFrancisco]);
var mapObj = map.getObjects();
console.log(yosmitePark.getGeometry());
console.log(PaohaIsland.getGeometry().distance(yosmitePark.getGeometry()));
}