Spatialite データベースにジオメトリがあります。jts トポロジ スイートの助けを借りて、Google マップ v2 にいくつかの単純なポリゴンを描画し、WKT を座標配列に変換することができました。しかし、マルチポリゴンを正しく描画する方法がわかりません。個々の小さな形状は接続されており、接続されるべきではありません。
正しいポリゴン:
障害のあるマルチポリゴン:
それがどうあるべきか:
Spatialite データベースにジオメトリがあります。jts トポロジ スイートの助けを借りて、Google マップ v2 にいくつかの単純なポリゴンを描画し、WKT を座標配列に変換することができました。しかし、マルチポリゴンを正しく描画する方法がわかりません。個々の小さな形状は接続されており、接続されるべきではありません。
正しいポリゴン:
障害のあるマルチポリゴン:
それがどうあるべきか:
それで、数日試した後、私はそれがこのように機能するようになりました。誰かの役に立てば幸いです。
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();
}
}