【问题标题】:How to add MultiPolygon do Android Google Maps v2 from WKT如何从 WKT 添加 MultiPolygon do Android Google Maps v2
【发布时间】:2015-03-19 16:18:37
【问题描述】:

我在空间数据库中有几何图形。在 jts 拓扑套件的帮助下,我设法在谷歌地图 v2 上绘制了一些简单的多边形,将 WKT 转换为坐标数组。但我不知道如何正确绘制多面体。各个较小的形状是相互关联的,它们不应该相互关联。

正确的多边形:

错误的多面体:

应该如何:

【问题讨论】:

  • Miguel,我在从 WKT 中提取多面体和绘制多边形时遇到了同样的问题。在您上面显示的代码中,wkt 是从哪里派生的?您显示从 htmlactivity 中检索功能是您正在阅读的地图片段。对于我的问题,我从 SQL SERVER 检索单个记录,然后将 WKT 作为 geom 类型的字符串读取。一些 wkt 是普通多边形,而另一些是多边形,我相信我需要检查一些多边形中的孔,如你所展示的。 Leres 您要查找的软件包是 jts 拓扑套件

标签: google-maps google-maps-android-api-2 polygon wkt


【解决方案1】:

所以经过几天的尝试,我得到了它的工作方式。 我希望它可以帮助某人。

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

    }

【讨论】:

  • WKTReader 属于哪个库?
猜你喜欢
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
  • 2015-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多