绘制国家边界作为多边形

oto*_*las 5 android google-maps-api-2

我正在使用Google Maps API(v2)开发Android应用程序.我想显示国家边界,但不显示国家/地区名称或任何其他信息(静音地图).应用的目的是创建地理游戏.

考虑到如文档中所述,Google Maps Android API不支持自定义样式,我首先考虑将每个国家/地区边框绘制为线条(使用折线).那么,我用谷歌搜索了一下,发现了所有国家已经完成的Polygon近似.它采用KML格式,很容易导入谷歌地球应用程序和谷歌地图有一些限制,但我一直无法找到Android的导入方法.

如果国家/ 地区只需要表示一个Polygon,则KML文件中的国家/地区的格式类似于以下内容(下载为csv):

Andorra,"
<Polygon>
    <outerBoundaryIs>
        <LinearRing>
            <coordinates>
                 1.78172,42.569962 1.723611,42.509438 1.445833,42.601944 1.78172,42.569962
             </coordinates>
        </LinearRing>
     </outerBoundaryIs>
</Polygon>"
Run Code Online (Sandbox Code Playgroud)

如果它具有多个Polygon,则为此格式:

Mayotte,"
<MultiGeometry>
    <Polygon>
        <outerBoundaryIs>
            <LinearRing>
                <coordinates>
                    45.282494,-12.80417 45.262497,-12.76889 45.283051,-12.7475 45.282494,-12.80417
                </coordinates>
            </LinearRing>
        </outerBoundaryIs>
    </Polygon>
    <Polygon>
        <outerBoundaryIs>
            <LinearRing>
                <coordinates>
                    45.204994,-12.84972 45.097496,-12.985834 45.078888,-12.6625 45.204994,-12.84972
                </coordinates>
            </LinearRing>
        </outerBoundaryIs>
    </Polygon>
</MultiGeometry>
Run Code Online (Sandbox Code Playgroud)

在这一步中,我想到了一个解决方案:

  • 直接在Android应用程序(在Activity的启动时)解析此KML文件,绘制每个Polygon:

// Instantiates a new Polygon object and adds points to define a rectangle
PolygonOptions rectOptions = new PolygonOptions()
    .add(new LatLng(37.35, -122.0),
    new LatLng(37.45, -122.0),
    new LatLng(37.45, -122.2),
    new LatLng(37.35, -122.2),
    new LatLng(37.35, -122.0));


myMap.addPolygon(rectOptions);
Run Code Online (Sandbox Code Playgroud)

我本来可以使解决方案有效,但是因为我想要更多的功能,比如只画一些大陆,解决方案还不够.

最后,我认为使用以下结构将KML文件转换为XML文件(并且具有强大的Python基础,认为XML很容易解析)会更好(也更容易理解):

<continent name="Europe">
    <country name="Andorra">
        //As many polygons as necessary
        <poligon1>
         //Coordinates go here
         </poligon1>

        <poligonN>
        //Coordinates go here
        </poligonN>
    </country>
</continent>
Run Code Online (Sandbox Code Playgroud)

我已经知道如何将KML转换为XML,但Android中有许多解析器,如DOM,SAX,XMLPull ......:

  • 哪种情况最适合这些情况?(KML文件大小为850kB).
  • 你能提供一些例子/提示,说明如何审查一个大陆上的所有多边形吗?

请注意,这种浏览XML的想法并不固定,如果有人有其他想法,我会很高兴听到它们.