【问题标题】:Create Bingmap pushpins from shape name从形状名称创建 Bingmap 图钉
【发布时间】:2021-10-04 10:42:32
【问题描述】:

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

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 模块来获取中心。

【问题讨论】:

  • 澄清一下,您希望图钉始终位于陆地上吗?我不熟悉 Bing Maps API,但有没有办法搜索几何而不包括(小)岛屿?也许过滤掉最大的多边形并选择它来放置图钉。
  • 听起来你想要类似的东西:github.com/mapbox/polylabel

标签: javascript gis bing-maps


【解决方案1】:

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

方法 1:此方法将回退到距多边形边缘的计算中心最近的点。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多