【问题标题】:Unfolding maps how obtain country for point location展开地图如何获取点位置的国家
【发布时间】:2016-08-07 09:22:21
【问题描述】:

我有文件包含我从中获取特征的国家/地区,然后列出了简单的标记:

// Load country polygons and adds them as markers
countries = GeoJSONReader.loadData(this, "countries.geo.json");
countryMarkers = MapUtils.createSimpleMarkers(countries);

现在我想检查给定点在哪个国家/地区。所以我确实在 AbstractShapeMarker 中投射了简单的标记,然后检查 isInsideByLocation:

for (Marker country: countryMarkers) {
        AbstractShapeMarker cou = (AbstractShapeMarker)country;
        if (cou.isInsideByLocation(place.getLocation())) {
            System.out.println("country!:" + country.getLocation() + "" +country.getProperties().get("name"));
        }
  }

这适用于简单形状的国家,但对于包含多个多边形的国家(例如美国),这不起作用。

在文档http://unfoldingmaps.org/javadoc/de/fhpotsdam/unfolding/data/MarkerFactory.html 中说要做标记工厂:

MarkerFactory markerFactory = new MarkerFactory();
markerFactory.setPolygonClass(MyPolygonMarker.class);
List<Marker> markers = markerFactory.createMarkers(features);
map.addMarkers(markers);

但我不明白如何创建类以便只获得多边形形状。

或者这可能是另一种方法检查展开地图的位置。

提前谢谢你!

【问题讨论】:

    标签: java


    【解决方案1】:

    那是因为您将标记投射到AbstractShapeMarker,它只处理单个多边形或线标记。根本不需要投。您只需使用map.getHitMarkers(x,y)map.getFirstHitMarker(x,y) 并使用它。

    void mouseMoved() {
      Marker marker = map.getFirstHitMarker(mouseX, mouseY);
      if (marker != null) {
        println(marker.getStringProperty("name"));
      }
    }
    

    在内部,这种包含多个多边形的标记是MultiMarkers,所以如果你想做一些特殊的事情并且需要类型转换,请使用那个类。

    【讨论】:

    • 谢谢,thagel,但这不是我需要的。我需要在没有任何地图迭代的情况下获取国家名称 - 否则我可以使用 country.isInside(arg0, arg1, arg2).. 其他计算需要国家名称..
    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多