Как добавить 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.

Другие вопросы по тегам