2

Spatialite データベースにジオメトリがあります。jts トポロジ スイートの助けを借りて、Google マップ v2 にいくつかの単純なポリゴンを描画し、WKT を座標配列に変換することができました。しかし、マルチポリゴンを正しく描画する方法がわかりません。個々の小さな形状は接続されており、接続されるべきではありません。

正しいポリゴン: 画像

障害のあるマルチポリゴン: ここに画像の説明を入力

それがどうあるべきか: ここに画像の説明を入力

4

1 に答える 1

4

それで、数日試した後、私はそれがこのように機能するようになりました。誰かの役に立てば幸いです。

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();
        }     

    }
于 2015-03-23T17:28:15.530 に答える