从形状名称创建Bingmap图钉



我需要为以下输入创建图钉。

var Countries = ["Austria", "Brazil", "India", "Germany", "USA", "Malaysia"];
Microsoft.Maps.SpatialDataService.GeoDataAPIManager.getBoundary(Countries, geoDataRequestOptions, map,
(data) => {
var value = data.location;
if (data.results.length > 0 && data.results[0].Polygons !== null) {
var polygons = data.results[0].Polygons;
var dataBounds = Microsoft.Maps.LocationRect.fromShapes(data.results[0].Polygons);
var loc = new Microsoft.Maps.Location(dataBounds.center.latitude, dataBounds.center.longitude);
var pin = new Microsoft.Maps.Pushpin(loc, {
icon: svgIcon,
anchor: new Microsoft.Maps.Point(20 / 2, 20 / 2) 
});
map.entities.push(pin);
locs.push(pin);
map.setView({ bounds: Microsoft.Maps.LocationRect.fromLocations(locs), padding: 80 });  
}
});
}, 3000);

我使用GeoDataAPIManager来获得边界多边形,并获得多边形的中心来生成图钉。但是当装载像马来西亚或美国这样的国家时,图钉被放置在海中,因为getboundary()返回多个多边形,并且获得多边形的中心返回两个边界之间的中心,从而导致图钉放置在海中。

让我知道是否有任何其他方法来创建图钉或获得多边形的中心。

我已经尝试了spatial.Math模块来获得中心。

在处理多边形时,这是一种常见的情况,因为它们的形状可能是这样的,它们的中心不在实际几何形状内。有几种不同的方法可以做到这一点。

方法1:此方法将返回到离计算中心最近的点,该点位于多边形的边缘。

  • 使用数学库或使用边界框中心计算质心/中心
  • 检查点是否与多边形相交,如果不相交,计算多边形边缘上最近的点(最短距离),然后使用该点作为中心。

方法二:只关注最大的多边形

  • 如果几何体是MultiPolygon,计算面积并抓取面积最大的多边形。对于美国,这将为您提供大陆的多边形,这可能是所需的。
  • 尝试方法1,仅使用最大的多边形。

方法3:尝试使用外部库计算视觉中心。

  • 将多边形转换为GeoJSON使用GeoJSON模块在Bing地图:https://www.bing.com/api/maps/sdkrelease/mapcontrol/isdk/geojsonwritetogeojson
  • 将geojson几何体传入此库以计算视觉中心。https://github.com/mapbox/polylabel

最新更新