Как добавить MultiPolygon для Android Google Maps v2 из WKT
У меня есть геометрия в пространственной базе данных. С помощью пакета топологии jts мне удалось нарисовать несколько простых многоугольников на картах Google v2, преобразовав WKT в массив координат. Но я не могу понять, как правильно рисовать мультиполигоны. Индивидуальные меньшие формы связаны, и они не должны быть.
Правильный полигон:
Неисправный мультиполигон:
Как это должно быть:
2 ответа
Так что после нескольких дней попыток я заработал вот так. Надеюсь, это кому-нибудь поможет.
private void test(){
GeometryFactory geometryFactory = new GeometryFactory();
WKTReader reader=new WKTReader(geometryFactory);
PolygonOptions polyOptions = null;
ArrayList<String> featureList = new ArrayList<String>();
MultiPolygon multipolygon = null;
Polygon polygon = null;
Coordinate[] outerCoordinates = null;
Coordinate[] innerCoordinates = null;
ArrayList<LatLng> outer = null;
ArrayList<LatLng> inner = null;
try {
//Gets a list of features in WKT format
featureList = HtmlActivity.mDbHelper.getFeatureList();
//Iterates the feature list
for (String feature : featureList) {
multipolygon = (MultiPolygon) reader.read(feature);
//Gets each polygon of a multipolygon
for(int i = 0; i < multipolygon.getNumGeometries(); i++)
{
outer = new ArrayList<LatLng>();
polyOptions = new PolygonOptions();
polygon = (Polygon) multipolygon.getGeometryN(i);
//Gets each polygon outer coordinates
outerCoordinates = polygon.getExteriorRing().getCoordinates();
for (Coordinate outerCoordinate : outerCoordinates){
outer.add(new LatLng(outerCoordinate.y, outerCoordinate.x));
}
polyOptions.addAll(outer);
//Getting each polygon interior coordinates (hole) if they exist
if(polygon.getNumInteriorRing() > 0){
for(int j = 0; j < polygon.getNumInteriorRing(); j++){
inner = new ArrayList<LatLng>();
innerCoordinates = polygon.getInteriorRingN(j).getCoordinates();
for (Coordinate innerCoordinate : innerCoordinates){
inner.add(new LatLng(innerCoordinate.y, innerCoordinate.x));
}
polyOptions.addHole(inner);
}
}
polyOptions.strokeColor(Color.rgb(30, 30, 30));
polyOptions.strokeWidth(2);
polyOptions.fillColor(Color.argb(255, 255, 0, 0));
googleMap.addPolygon(polyOptions);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Мигель, у меня была такая же проблема с извлечением мультиполигонов из WKT и рисованием полигонов. В вашем коде, который вы показали выше, откуда происходит wkt? Вы показываете, что получение функции из html-активности - это фрагмент карты, который вы читаете. С моей проблемой я получаю отдельные записи из SQL SERVER, а затем читаю WKT как строку из типа geom. Некоторые из них являются простыми полигонами, а другие - мультиполигонами, я считаю, что мне нужно проверить наличие дыр в некоторых мультиполигонах, как вы показываете.Leres пакет, который вы ищете, - это пакет топологии jts.