Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将google地图中的多边形存储到sqLite数据库_Android_Google Maps_Android Sqlite_Polygon - Fatal编程技术网

Android 如何将google地图中的多边形存储到sqLite数据库

Android 如何将google地图中的多边形存储到sqLite数据库,android,google-maps,android-sqlite,polygon,Android,Google Maps,Android Sqlite,Polygon,我在android studio上使用谷歌地图,我在地图上绘制多边形。在这之前,一切都很顺利,但现在我想将这个多边形存储到sqlite数据库,然后将这些数据检索到listView。现在我不明白如何在我的代码中实现这一点。如果有人对此有任何想法,请救我 以下是我绘制多边形的代码: @Override public void onMapReady(final GoogleMap googleMap) { final List<LatLng> latLngList = n

我在android studio上使用谷歌地图,我在地图上绘制多边形。在这之前,一切都很顺利,但现在我想将这个多边形存储到sqlite数据库,然后将这些数据检索到listView。现在我不明白如何在我的代码中实现这一点。如果有人对此有任何想法,请救我

以下是我绘制多边形的代码:

     @Override
public void onMapReady(final GoogleMap googleMap) {
    final List<LatLng> latLngList = new ArrayList<>(); // list of polygons
    final List<Marker> markerList = new ArrayList<>();
    mMap = googleMap;


    LatLng center = new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude());
    final MarkerOptions markerOptions = new MarkerOptions().position(center).title(center.latitude + ":" + center.longitude);
    mMap.clear();
    googleMap.animateCamera(CameraUpdateFactory.newLatLng(center));
    googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(center, 18));
    googleMap.addMarker(markerOptions);

    mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {

        @Override
        public void onMapClick(final LatLng latLng) {
            int height = 50;
            int width = 30;
            BitmapDrawable bitmapdraw = (BitmapDrawable)getResources().getDrawable(R.mipmap.marker);
            Bitmap b = bitmapdraw.getBitmap();
            Bitmap smallMarker = Bitmap.createScaledBitmap(b, width, height, false);
            /*Marker marker = googleMap.addMarker(markerOptions);*/
            Marker marker = mMap.addMarker(new MarkerOptions().position(latLng).draggable(true).icon(BitmapDescriptorFactory.fromBitmap(smallMarker)));
            markerList.add(marker);
            latLngList.add(latLng);

            drawPolygon(latLngList);
            polygon.setClickable(true);
        }
    });

    mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
        @Override
        public void onMapLongClick(LatLng latLng) {
            polygon.remove();
            /*marker.remove();
            markerList.remove(marker);*/

        }
    });
}

private void drawPolygon(List<LatLng> latLngList) {

    if (polygon != null) {
        polygon.remove();
    }

    PolygonOptions polygonOptions = new PolygonOptions();
    polygonOptions.fillColor(0x7F228B22);
    polygonOptions.strokeColor(Color.GREEN);
    polygonOptions.strokeWidth(5);
    polygonOptions.addAll(latLngList);
    polygon = mMap.addPolygon(polygonOptions);
}
@覆盖
4月1日公开作废(最终谷歌地图谷歌地图){
final List latLngList=new ArrayList();//多边形列表
最终列表标记列表=新的ArrayList();
mMap=谷歌地图;
LatLng中心=新LatLng(currentLocation.getLatitude(),currentLocation.getLength());
最终标记选项标记选项=新标记选项().位置(中心).title(中心.纬度+“:”+中心.经度);
mMap.clear();
谷歌地图。动画美拉(CameraUpdateFactory。newLatLng(中));
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(中,18));
googleMap.addMarker(markerOptions);
mMap.setOnMapClickListener(新的GoogleMap.OnMapClickListener(){
@凌驾
公共无效(最终板条){
整数高度=50;
整数宽度=30;
BitmapDrawable bitmapdraw=(BitmapDrawable)getResources().getDrawable(R.mipmap.marker);
位图b=bitmapdraw.getBitmap();
位图smallMarker=Bitmap.createScaledBitmap(b,宽度,高度,false);
/*Marker=googleMap.addMarker(markerOptions)*/
Marker Marker=mMap.addMarker(新的MarkerOptions().position(latLng).draggable(true).icon(BitmapDescriptorFactory.fromBitmap(smallMarker)));
markerList.add(marker);
latLngList.add(latLng);
绘图多边形(latLngList);
多边形。可点击设置(真);
}
});
mMap.setOnMapLongClickListener(新的GoogleMap.OnMapLongClickListener(){
@凌驾
在MaplongClick(LatLng LatLng)上的公共无效{
polygon.remove();
/*marker.remove();
标记列表。删除(标记)*/
}
});
}
私有void drawPolygon(列表latLngList){
如果(多边形!=null){
polygon.remove();
}
PolygonOptions PolygonOptions=新PolygonOptions();
多边形选项。填充颜色(0x7F228B22);
多功能选择。strokeColor(颜色。绿色);
脉冲宽度(5);
polygonooptions.addAll(拉丁英语);
多边形=mMap.addPolygon(多边形选项);
}

我的列表视图看起来像[![this][1][1]

您可以保存所需的主要属性。例如在我的例子中,我需要保存坐标和相机缩放。然后您可以创建这样的自定义类

class CustomLatLng : Serializable{

    var latitudeList : MutableList<String> = mutableListOf()
    var longitudeList : MutableList<String> = mutableListOf()
    var cameraPositionLat : Double = 0.0
    var cameraPositionLng : Double = 0.0
    var zoomCamera : Float = 12f

    fun add(latitude : Double, longitude : Double ){
        latitudeList.add(latitude.toString())
        longitudeList.add(longitude.toString())
    }
    fun clearLatLng(){
        latitudeList.clear()
        longitudeList.clear()
    }

    fun isNotEmpty(): Boolean{
        return !(latitudeList.isEmpty() || longitudeList.isEmpty())
    }

}
只要有多边形,请仅保存重新创建多边形所需的数据

 val customLatLng = CustomLatLng()
polygon?.points?.forEach {
    customLatLng.add(it.latitude, it.longitude)
}

customLatLng.zoomCamera = 10f

savePolygon(customLatLng)

注意:我只保存我需要的数据,您必须根据需要创建尽可能多的变量,我希望这有助于

“将此多边形存储到sqlite数据库,然后将此数据检索到listView”如何在listView中显示?作为坐标列表?还是以多边形的形式?无论如何,代码中都有坐标。将这些存储到SQLite。如果您不知道如何使用SQLite,那么请查看文档和教程,并尝试一些方法。@MarkusKauppinen我想以kml文件格式存储多边形,但我不知道确切的方法。为什么要将其存储为kml?你说的kml文件格式是什么意思?正如前面的评论中提到的,您已经拥有了生成多边形的所有坐标。为什么不直接存储它们呢?KML只是XML,XML只是文本,文本可以存储到SQLite中。因此,最初的问题是a)将坐标写入符合KML规范的
字符串,以及b)将
字符串写入SQLite。然后,稍后将执行相反的步骤。您可能会找到一些用Java编写XML的指南/教程/库。使用SQLite应该有很好的文档记录。(尽管谷歌的文档会建议使用
Room
)Android应该很好地支持XML解析(读取)。@MarkusKauppinen ok。那么,存储KML还是将多边形坐标存储到sqlite,哪种方法好呢。我想澄清的一点是,我喜欢在列表视图中以图形方式显示多边形
 val customLatLng = CustomLatLng()
polygon?.points?.forEach {
    customLatLng.add(it.latitude, it.longitude)
}

customLatLng.zoomCamera = 10f

savePolygon(customLatLng)