From 4db3982b83562a6be79815f40fcb62073f29cffc Mon Sep 17 00:00:00 2001 From: wangdongsheng Date: Wed, 1 Sep 2021 18:11:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BD=8D=E5=8E=8B=E7=9B=96?= =?UTF-8?q?=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../outdoor/activity/LoginActivity.java | 23 +- .../outdoor/activity/MainActivity.java | 15 +- .../outdoor/activity/PicturesActivity.java | 6 - .../outdoor/activity/TestActivity.java | 278 +++++++--- .../outdoor/adapter/MarkerAdapter.java | 118 ++++ .../outdoor/fragment/GatherGetFragment.java | 28 +- .../outdoor/fragment/TreasureFragment.java | 509 ++++++++++++------ .../navinfo/outdoor/http/HttpInterface.java | 89 +-- .../navinfo/outdoor/util/GeometryTools.java | 15 + app/src/main/res/layout/item_marker.xml | 28 + .../main/res/layout/layout_marker_dialog.xml | 18 + 11 files changed, 816 insertions(+), 311 deletions(-) create mode 100644 app/src/main/java/com/navinfo/outdoor/adapter/MarkerAdapter.java create mode 100644 app/src/main/res/layout/item_marker.xml create mode 100644 app/src/main/res/layout/layout_marker_dialog.xml diff --git a/app/src/main/java/com/navinfo/outdoor/activity/LoginActivity.java b/app/src/main/java/com/navinfo/outdoor/activity/LoginActivity.java index 3f1114d..e113d62 100644 --- a/app/src/main/java/com/navinfo/outdoor/activity/LoginActivity.java +++ b/app/src/main/java/com/navinfo/outdoor/activity/LoginActivity.java @@ -162,6 +162,7 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener navInfoEditor.putString("refresh_token",body.getRefresh_token()); navInfoEditor.putString("pass_word",paw); navInfoEditor.putString("user_name",name); + navInfoEditor.putString("user_id",body.getUserId()); navInfoEditor.commit(); Constant.ACCESS_TOKEN=body.getAccess_token(); Constant.REFRESH_TOKEN=body.getRefresh_token(); @@ -232,28 +233,6 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener if (needGuide==1){ Intent intent = new Intent(LoginActivity.this, GuidanceActivity.class); startActivity(intent); - /* AlertDialog alertDialog = new AlertDialog.Builder(LoginActivity.this,R.style.dialog).create(); - alertDialog.show(); - WindowManager windowManager = getWindowManager(); - Display defaultDisplay = windowManager.getDefaultDisplay(); - Point point = new Point(); - defaultDisplay.getSize(point); - Window window = alertDialog.getWindow(); - assert window != null; - WindowManager.LayoutParams lp = ((Window) window).getAttributes(); - lp.width = point.x; // 设置宽度和高度 - lp.height = point.y; - getWindow().getDecorView().setPadding( 0 , 0 , 0 , 0 ); - window.setAttributes(lp); - window.setContentView(R.layout.login_task_item); - window.findViewById(R.id.btn_login).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(LoginActivity.this, GuidanceActivity.class); - startActivity(intent); - alertDialog.dismiss(); - } - });*/ }else { Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(LoginActivity.this, HomeActivity.class); diff --git a/app/src/main/java/com/navinfo/outdoor/activity/MainActivity.java b/app/src/main/java/com/navinfo/outdoor/activity/MainActivity.java index 9a6fde1..3b907f4 100644 --- a/app/src/main/java/com/navinfo/outdoor/activity/MainActivity.java +++ b/app/src/main/java/com/navinfo/outdoor/activity/MainActivity.java @@ -1,8 +1,10 @@ package com.navinfo.outdoor.activity; import android.app.ProgressDialog; +import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.content.SharedPreferences; import android.net.Uri; import android.os.Build; import android.os.CountDownTimer; @@ -74,6 +76,7 @@ public class MainActivity extends BaseActivity { }); private ProgressDialog pBar; private int progress; + private String user_id; @Override protected int getLayout() { @@ -117,7 +120,11 @@ public class MainActivity extends BaseActivity { @Override public void onGranted(List permissions, boolean all) { if (all) { - initCheckVersion(); + if (user_id!=null){ + initCheckVersion(); + }else { + initTime(); + } //initTime(); } else { initPermission(); @@ -288,7 +295,7 @@ public class MainActivity extends BaseActivity { FileOutputStream fileOutputStream = null; if (is != null) { //对apk进行保存 - File file = new File(Constant.NABISCO_APk +"NVINFO.apk"); + File file = new File(Constant.NABISCO_APk +"DTXB.apk"); fileOutputStream = new FileOutputStream(file); byte[] buf = new byte[1024]; int ch; @@ -318,6 +325,10 @@ public class MainActivity extends BaseActivity { @Override protected void initView() { super.initView(); + SharedPreferences navInfo = getSharedPreferences(Constant.SHARED_PREFERENCES, Context.MODE_PRIVATE); + user_id = navInfo.getString("user_id", null); + Constant.ACCESS_TOKEN= navInfo.getString("access_token", null);; + HttpInterface.initAppPath(user_id); initPermission(); } diff --git a/app/src/main/java/com/navinfo/outdoor/activity/PicturesActivity.java b/app/src/main/java/com/navinfo/outdoor/activity/PicturesActivity.java index 968f342..3d19240 100644 --- a/app/src/main/java/com/navinfo/outdoor/activity/PicturesActivity.java +++ b/app/src/main/java/com/navinfo/outdoor/activity/PicturesActivity.java @@ -1,8 +1,6 @@ package com.navinfo.outdoor.activity; - import androidx.annotation.NonNull; import androidx.annotation.Nullable; - import android.annotation.SuppressLint; import android.content.Intent; import android.content.pm.ActivityInfo; @@ -54,22 +52,18 @@ import com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle; import com.tencent.tencentmap.mapsdk.maps.model.Polyline; import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions; import com.vividsolutions.jts.geom.Geometry; - import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import org.jetbrains.annotations.NotNull; - import java.io.File; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; - import static com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE; import static com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER; -import static com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle.LOCATION_TYPE_MAP_ROTATE_NO_CENTER; public class PicturesActivity extends BaseActivity implements View.OnClickListener { private static final CameraLogger LOG = CameraLogger.create("Picture"); diff --git a/app/src/main/java/com/navinfo/outdoor/activity/TestActivity.java b/app/src/main/java/com/navinfo/outdoor/activity/TestActivity.java index 345355a..ee2bb8b 100644 --- a/app/src/main/java/com/navinfo/outdoor/activity/TestActivity.java +++ b/app/src/main/java/com/navinfo/outdoor/activity/TestActivity.java @@ -6,19 +6,33 @@ import android.graphics.Color; import android.graphics.Matrix; import android.os.Message; import android.util.Log; +import android.view.Gravity; import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; import android.widget.Button; +import android.widget.ImageView; +import android.widget.RelativeLayout; import android.widget.Toast; +import androidx.appcompat.app.AlertDialog; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.kongzue.dialog.util.BaseDialog; +import com.kongzue.dialog.v3.CustomDialog; import com.lzy.okgo.OkGo; import com.lzy.okgo.model.HttpParams; import com.navinfo.outdoor.R; +import com.navinfo.outdoor.adapter.MarkerAdapter; import com.navinfo.outdoor.api.Constant; import com.navinfo.outdoor.base.BaseActivity; import com.navinfo.outdoor.bean.JobSearchBean; import com.navinfo.outdoor.http.Callback; import com.navinfo.outdoor.http.HttpInterface; import com.navinfo.outdoor.http.OkGoBuilder; +import com.navinfo.outdoor.room.PoiEntity; import com.navinfo.outdoor.util.Geohash; import com.navinfo.outdoor.util.GeometryTools; import com.navinfo.outdoor.util.MarkerClusterItem; @@ -26,6 +40,7 @@ import com.navinfo.outdoor.util.MyTecentLocationSource; import com.tencent.map.geolocation.TencentLocation; import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; +import com.tencent.tencentmap.mapsdk.maps.Projection; import com.tencent.tencentmap.mapsdk.maps.TencentMap; import com.tencent.tencentmap.mapsdk.maps.TextureMapView; import com.tencent.tencentmap.mapsdk.maps.UiSettings; @@ -48,6 +63,7 @@ import com.tencent.tencentmap.mapsdk.vector.utils.clustering.ClusterItem; import com.tencent.tencentmap.mapsdk.vector.utils.clustering.ClusterManager; import com.tencent.tencentmap.mapsdk.vector.utils.clustering.algo.NonHierarchicalDistanceBasedAlgorithm; import com.tencent.tencentmap.mapsdk.vector.utils.clustering.view.DefaultClusterRenderer; +import com.vividsolutions.jts.awt.PointShapeFactory; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryFactory; @@ -60,7 +76,9 @@ import org.greenrobot.eventbus.ThreadMode; import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.List; +import java.util.Map; import static com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE; import static com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER; @@ -69,14 +87,12 @@ public class TestActivity extends BaseActivity { private TencentMap tencentMap; private List removables; - private List markerLatlng; private final int MARKER_DOT = 3; private final int MARKER_LINE = 2; private final int MARKER_FACE = 1; private ClusterManager clusterItemClusterManager; - private Circle circle; - private List items; - + private HashMap> stringListHashMap; + private ArrayList listLatlng; @Override protected int getLayout() { @@ -87,9 +103,10 @@ public class TestActivity extends BaseActivity { protected void initData() { super.initData(); removables = new ArrayList<>();//存储网络数据的marker数据(线,面,点) - markerLatlng = new ArrayList<>();//存储网络数据的marker数据(线,面,点) + stringListHashMap = new HashMap<>();//key :wkt,value :存储的数据类型 + //存储的多点latlng + listLatlng = new ArrayList<>(); initList(Constant.currentLocation); - } private void initList(TencentLocation tencentLocation) { @@ -105,6 +122,7 @@ public class TestActivity extends BaseActivity { } //获取中心点位置 LatLng mapCenterPoint = tencentMap.getCameraPosition().target; + String centerEncode = null; if (mapCenterPoint != null) { centerEncode = Geohash.getInstance().encode(mapCenterPoint.latitude, mapCenterPoint.longitude); @@ -134,17 +152,19 @@ public class TestActivity extends BaseActivity { if (response.getCode() == 200) { JobSearchBean.BodyBean body = response.getBody(); if (body != null) { - Log.d("TAG", "onSuccess: " + response.getBody().toString() + "sassafras's"); + Log.d("TAG", "onSuccess: " + response.getBody().toString()); for (int i = 0; i < removables.size(); i++) { removables.get(i).remove(); } removables.clear(); + stringListHashMap.clear(); List list = response.getBody().getList(); for (int i = 0; i < list.size(); i++) { JobSearchBean.BodyBean.ListBean listBean = list.get(i); String encodeStr = list.get(i).getGeo(); // 解密geo - String geo = Geohash.getInstance().decode(encodeStr); + Geometry geoMe = GeometryTools.createGeometry(Geohash.getInstance().decode(encodeStr)); + String geo = geoMe.toString(); listBean.setGeo(geo); Log.d("TAG", "onSuccess: " + geo); Geometry geometry = GeometryTools.createGeometry(geo); @@ -163,20 +183,15 @@ public class TestActivity extends BaseActivity { List latLineString = GeometryTools.getLatLngs(geo); // 构造 PolylineOptions PolylineOptions polylineOptions = new PolylineOptions() - .addAll(latLineString) - // 折线设置圆形线头 - .lineCap(true) - // 折线的颜色为绿色 - .color(Color.parseColor("#0096FF")) - // 折线宽度为5像素 + .addAll(latLineString)// 折线设置圆形线头 + .lineCap(true)// 折线的颜色为绿色 + .color(Color.parseColor("#0096FF"))// 折线宽度为5像素 .width(10) .arrow(true) + //.borderColor(0xffff0000) // 还可以添加描边颜色 + //.borderWidth(1) // 描边颜色的宽度,线宽还是 25 像素,不过填充的部分宽度为 `width` - 2 * `borderWidth` .arrowSpacing(100) .arrowTexture(bitmapLine); - // 还可以添加描边颜色 - //.borderColor(0xffff0000) - // 描边颜色的宽度,线宽还是 25 像素,不过填充的部分宽度为 `width` - 2 * `borderWidth` - //.borderWidth(1); // 绘制折线 Polyline polyline = tencentMap.addPolyline(polylineOptions); polyline.setZIndex(MARKER_LINE); @@ -188,14 +203,10 @@ public class TestActivity extends BaseActivity { case "Polygon": //面 List latPolygon = GeometryTools.getLatLngs(geo); Polygon polygon = tencentMap.addPolygon(new PolygonOptions(). - //连接封闭图形的点 - addAll(latPolygon). - //填充颜色为红色 - fillColor(Color.parseColor("#97E0E7EC")). - //边线颜色为黑色 - strokeColor(0xff000000). - //边线宽度15像素 - strokeWidth(5)); + addAll(latPolygon).//连接封闭图形的点 + fillColor(Color.parseColor("#97E0E7EC")). //填充颜色为红色 + strokeColor(0xff000000).//边线颜色为黑色 + strokeWidth(5));//边线宽度15像素 polygon.setZIndex(MARKER_FACE); removables.add(polygon); com.vividsolutions.jts.geom.Point centroid = geometry.getCentroid(); @@ -209,7 +220,6 @@ public class TestActivity extends BaseActivity { }*/ break; } - markerLatlng.add(latLng); switch (list.get(i).getType()) { case 1://poi BitmapDescriptor poiDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.marker_poi_bg1); @@ -223,6 +233,7 @@ public class TestActivity extends BaseActivity { poiMarker.setTag(listBean); removables.add(poiMarker); poiMarker.setClickable(true); + onMarker(geo, poiMarker); break; case 2://充电站 BitmapDescriptor chargeDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.marker_charge_bg1); @@ -235,6 +246,7 @@ public class TestActivity extends BaseActivity { stationMarker.setTag(listBean); removables.add(stationMarker); stationMarker.setClickable(true); + onMarker(geo, stationMarker); break; case 3://poi录像 BitmapDescriptor poiVideoDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.marker_poi_video_bg1); @@ -247,6 +259,7 @@ public class TestActivity extends BaseActivity { poiVideoMarker.setZIndex(MARKER_DOT); removables.add(poiVideoMarker); poiVideoMarker.setClickable(true); + onMarker(geo, poiVideoMarker); break; case 4://道路录像 BitmapDescriptor roadDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.marker_road_bg); @@ -259,6 +272,7 @@ public class TestActivity extends BaseActivity { roadMarker.setTag(listBean); removables.add(roadMarker); roadMarker.setClickable(true); + onMarker(geo, roadMarker); break; case 5://其他 BitmapDescriptor otherDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.marker_other_bg1); @@ -271,6 +285,7 @@ public class TestActivity extends BaseActivity { otherMarker.setTag(listBean); removables.add(otherMarker); otherMarker.setClickable(true); + onMarker(geo, otherMarker); break; case 6://面状任务 BitmapDescriptor Descriptor = BitmapDescriptorFactory.fromResource(R.drawable.marker_facet_bg1); @@ -283,11 +298,22 @@ public class TestActivity extends BaseActivity { planarMarker.setTag(listBean); removables.add(planarMarker); planarMarker.setClickable(true); + onMarker(geo, planarMarker); break; + } } } - initNewMarker(); + listLatlng.clear(); + for (Map.Entry> entry : stringListHashMap.entrySet()) { + String key = entry.getKey(); + List markerList = stringListHashMap.get(key); + assert markerList != null; + Log.d("TAG", "onSuenccess: "+markerList.toString()); + Log.d("TAG", "onSuenccess: "+entry.getValue()+"sssssssssssssssssssssssssssssss"+entry.getKey()); + LatLng lng = GeometryTools.createLatLng(key); + listLatlng.add(lng); + } Message obtain = Message.obtain(); obtain.what = Constant.JOB_SEARCH_WORD; obtain.obj = response; @@ -296,6 +322,7 @@ public class TestActivity extends BaseActivity { Toast.makeText(TestActivity.this, response.getMessage(), Toast.LENGTH_SHORT).show(); } } + @Override public void onError(Throwable e, int id) { dismissLoadingDialog(); @@ -304,6 +331,19 @@ public class TestActivity extends BaseActivity { }); } + public void onMarker(String geo, Marker marker) { + if (!stringListHashMap.containsKey(geo)) { + List markers = new ArrayList<>(); + markers.add(marker); + stringListHashMap.put(geo, markers); + } else { + List markers = stringListHashMap.get(geo); + assert markers != null; + markers.add(marker); + stringListHashMap.put(geo, markers); + } + } + @Override protected void initView() { super.initView(); @@ -317,40 +357,162 @@ public class TestActivity extends BaseActivity { uiSettings.setTiltGesturesEnabled(false);//禁止倾斜手势. //uiSettings.setAllGesturesEnabled(false); setLocMarkerStyle(LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER); - // initCluster(); + // initCluster(); + initNewMarker(); + } private void initNewMarker() { - //添加圆 - LatLng mapCenterPoint = tencentMap.getCameraPosition().target; - circle = tencentMap.addCircle(new CircleOptions(). - center(mapCenterPoint).// 圆心 - radius(1000d).// 半径 - fillColor(0xff0000ff).// 圆的填充色为蓝色 - strokeColor(0xff000000).// 描边的颜色为黑色 - strokeWidth(1).// 描边宽度 - clickable(true).// 可点击性 - visible(true).// 可见性 - zIndex(2));// 层级 - circle.setFillColor(0xFF00ff00);// 设置圆的填充色为红色 - // 移除圆 - // circle.remove(); - //中心点的圆 - Geometry geometry = GeometryTools.createGeometry(mapCenterPoint); - // 多 点 - MultiPoint multiPoint = GeometryTools.createMultiPoint(markerLatlng); - // 点与多点直接形成的交叉点 - if (multiPoint!=null){ - Geometry intersection = geometry.intersection(multiPoint); - if (intersection.getGeometryType().equals("Point")){} - Log.d("ddddd", "initNewMarker: " + intersection); - } + tencentMap.setOnMapClickListener(new TencentMap.OnMapClickListener() { + @Override + public void onMapClick(LatLng latLng) { + + + } + }); + tencentMap.setOnMarkerClickListener(new TencentMap.OnMarkerClickListener() { + @Override + public boolean onMarkerClick(Marker marker) { + LatLng latLng = marker.getPosition(); + ArrayList latLngs = new ArrayList<>();//存储的是内部的屏幕点坐标 + Projection projection = tencentMap.getProjection(); + android.graphics.Point point = projection.toScreenLocation(latLng);//转换为屏幕坐标 + int minX = point.x - 200; + int minY = point.y - 200; + int maxX = point.x + 200; + int maxY = point.y + 200; + point.set(minX, minY); + latLngs.add(new LatLng(projection.fromScreenLocation(point))); + point.set(maxX, minY); + latLngs.add(new LatLng(projection.fromScreenLocation(point))); + point.set(maxX, maxY); + latLngs.add(new LatLng(projection.fromScreenLocation(point))); + point.set(minX, maxY); + latLngs.add(new LatLng(projection.fromScreenLocation(point))); + point.set(minX, minY); + latLngs.add(new LatLng(projection.fromScreenLocation(point))); + com.vividsolutions.jts.geom.Polygon polygon = GeometryTools.createPolygon(latLngs); + //多点 + MultiPoint multiPoint = GeometryTools.createMultiPoint(listLatlng); + //拿到覆蓋點 + Geometry intersection = polygon.intersection(multiPoint); + String geometryType = intersection.getGeometryType(); + ArrayList poiEntityArrayList = new ArrayList<>(); + if (geometryType.equals("MultiPoint")) { + List latList = GeometryTools.getLatList(intersection); + for (int i = 0; i < latList.size(); i++) { + LatLng latL = latList.get(i); + Geometry geometry = GeometryTools.createGeometry(latL); + Log.d("TAG", "onMarkerClick: "+geometry.toString()); + List markerList = stringListHashMap.get(geometry.toText()); + if (markerList!=null){ + for (Marker mar : markerList) { + JobSearchBean.BodyBean.ListBean listBean = (JobSearchBean.BodyBean.ListBean) mar.getTag(); + if (listBean != null) { + PoiEntity poiListEntity = new PoiEntity(); + poiListEntity.setTaskId(listBean.getId()); + poiListEntity.setGeoWkt(listBean.getGeo()); + poiListEntity.setName(listBean.getName()); + poiListEntity.setAddress(listBean.getAddress()); + poiListEntity.setTelPhone(listBean.getTelephone() + ""); + poiListEntity.setPrecision(listBean.getPrice() + ""); + poiListEntity.setDist(listBean.getDist() + ""); + poiListEntity.setDescribe(listBean.getMemo()); + poiListEntity.setCreateTime(listBean.getEndDate()); + poiListEntity.setType(listBean.getType()); + String beanGeo = listBean.getGeo(); + poiListEntity.setGeoWkt(beanGeo); + Geometry geos = GeometryTools.createGeometry(beanGeo); + switch (geos.getGeometryType()) { + case "Point": //点 + LatLng lng = GeometryTools.createLatLng(beanGeo); + poiListEntity.setX(lng.longitude + ""); + poiListEntity.setY(lng.latitude + ""); + break; + case "LineString": //线 + case "Polygon": //面 + List latLineString = GeometryTools.getLatLngs(beanGeo); + assert latLineString != null; + poiListEntity.setX(latLineString.get(0).longitude + ""); + poiListEntity.setY(latLineString.get(0).latitude + ""); + break; + } + poiEntityArrayList.add(poiListEntity); + + } + } + } + + } + customDialog(poiEntityArrayList); + } else { + Log.d("TAG", "onMapClick: " + geometryType); + } + return false; + } + }); + /* tencentMap.setOnMarkerClickListener(new TencentMap.OnMarkerClickListener() { + @Override + public boolean onMarkerClick(Marker marker) { + if (marker.getTag().equals("marker")) { + Toast.makeText(TestActivity.this, marker.getId()+"sssssssssssssssssssss", Toast.LENGTH_SHORT).show(); + //中心点的圆 + // Geometry geometry = GeometryTools.createGeometry(); + // 多 点 + MultiPoint multiPoint = GeometryTools.createMultiPoint(markerLatlng); + // 点与多点直接形成的交叉点 + if (multiPoint != null) { + Geometry intersection = geometry.intersection(multiPoint); + intersection.getGeometryType() + Coordinate[] coordinates = intersection.getCoordinates(); + if (coordinates != null && coordinates.length > 0) { + LatLng geo = new LatLng(coordinates[0].y, coordinates[0].x); + BitmapDescriptor chargeDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.marker_charge_bg1); + tencentMap.addMarker(new MarkerOptions(geo).icon(chargeDescriptor).alpha(0.9f) + .anchor(0.5f, 1.0f) + .flat(true) + .clockwise(false)); + Log.d("yyyy", "initNewMarker: " + geo); + } + } + } + return false; + } + });*/ + } + + /** + * 自定义登录对话框 + */ + public void customDialog(List list) { + AlertDialog.Builder builder = new AlertDialog.Builder(TestActivity.this); + final AlertDialog dialog = builder.create(); + View dialogView = View.inflate(this, R.layout.layout_marker_dialog, null); + dialog.setView(dialogView); + Window win = dialog.getWindow(); + win.setGravity(Gravity.BOTTOM); // 这里控制弹出的位置 + win.getDecorView().setPadding(0, 0, 0, 0); + WindowManager.LayoutParams lp = win.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + lp.height = WindowManager.LayoutParams.WRAP_CONTENT; + dialog.getWindow().setBackgroundDrawable(null); + win.setAttributes(lp); + dialog.show(); + RecyclerView recyclerView = dialogView.findViewById(R.id.rv_marker_view); + recyclerView.setLayoutManager(new LinearLayoutManager(this)); + MarkerAdapter markerAdapter = new MarkerAdapter(list, TestActivity.this); + recyclerView.setAdapter(markerAdapter); + markerAdapter.setOnBankClick(new MarkerAdapter.OnBankClick() { + @Override + public void onClick(PoiEntity poiEntity) { + dialog.dismiss(); + } + }); } private void initCluster() { // 实例化点聚合管理者 clusterItemClusterManager = new ClusterManager<>(this, tencentMap); - //默认聚合策略,调用是不必添加,如果需要其他聚合策略可以按以下代码修改 NonHierarchicalDistanceBasedAlgorithm hierarchicalDistanceBasedAlgorithm = new NonHierarchicalDistanceBasedAlgorithm<>(this); //设置点聚合生效距离,以dp为代码 @@ -361,13 +523,11 @@ public class TestActivity extends BaseActivity { DefaultClusterRenderer markerClusterItemDefaultClusterRenderer = new DefaultClusterRenderer<>(this, tencentMap, clusterItemClusterManager); //设置最小聚合数量,默认为4.这里设置为2,即有两个以上不包括2个marker 才会聚合 markerClusterItemDefaultClusterRenderer.setMinClusterSize(2); - //定义聚合的分段,当超过五个不足10个的时候,显示5+ ,其他分段同理 markerClusterItemDefaultClusterRenderer.setBuckets(new int[]{5, 10, 15, 20, 25, 50, 100, 200}); clusterItemClusterManager.setRenderer(markerClusterItemDefaultClusterRenderer); //添加聚合 - - items = new ArrayList<>(); + List items = new ArrayList<>(); items.add(new MarkerClusterItem(39.984059, 116.307621)); items.add(new MarkerClusterItem(39.981954, 116.304703)); items.add(new MarkerClusterItem(39.984355, 116.312256)); @@ -394,13 +554,11 @@ public class TestActivity extends BaseActivity { items.add(new MarkerClusterItem(22.538086, 113.999805)); items.add(new MarkerClusterItem(22.534756, 114.082031)); clusterItemClusterManager.addItems(items); - tencentMap.setOnCameraChangeListener(clusterItemClusterManager); tencentMap.setOnCameraChangeListener(new TencentMap.OnCameraChangeListener() { @Override public void onCameraChange(CameraPosition cameraPosition) { clusterItemClusterManager.cluster(); - } @Override @@ -442,7 +600,6 @@ public class TestActivity extends BaseActivity { return bitmap; } - @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMessageMainThread(Message msg) { if (msg.what == Constant.EVENT_WHAT_LOCATION_CHANGE) { // 用户位置更新 @@ -458,4 +615,5 @@ public class TestActivity extends BaseActivity { } } } + } diff --git a/app/src/main/java/com/navinfo/outdoor/adapter/MarkerAdapter.java b/app/src/main/java/com/navinfo/outdoor/adapter/MarkerAdapter.java new file mode 100644 index 0000000..c67ba6a --- /dev/null +++ b/app/src/main/java/com/navinfo/outdoor/adapter/MarkerAdapter.java @@ -0,0 +1,118 @@ +package com.navinfo.outdoor.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.navinfo.outdoor.R; +import com.navinfo.outdoor.bean.BankPathBean; +import com.navinfo.outdoor.room.PoiEntity; + +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class MarkerAdapter extends RecyclerView.Adapter { + private List poiEntities ; + private Context context; + + public MarkerAdapter(List poiEntities, Context context) { + this.poiEntities = poiEntities; + this.context = context; + } + + @NotNull + @Override + public ViewHolder onCreateViewHolder(@NonNull @NotNull ViewGroup parent, int viewType) { + View inflate = LayoutInflater.from(context).inflate(R.layout.item_marker, parent, false); + return new ViewHolder(inflate); + } + + @Override + public void onBindViewHolder(@NonNull @NotNull ViewHolder holder, int position) { + PoiEntity poiEntity = poiEntities.get(position); + if (poiEntity.getTaskStatus()==0||poiEntity.getTaskStatus()==1){ + switch (poiEntity.getType()){ + case 1: + Glide.with(context).load(R.drawable.marker_poi_bg1).into(holder.ivIcon); + break; + case 2: + Glide.with(context).load(R.drawable.marker_charge_bg1).into(holder.ivIcon); + break; + case 3: + Glide.with(context).load(R.drawable.marker_poi_video_bg1).into(holder.ivIcon); + break; + case 4: + Glide.with(context).load(R.drawable.marker_road_bg).into(holder.ivIcon); + break; + case 5: + Glide.with(context).load(R.drawable.marker_other_bg1).into(holder.ivIcon); + break; + case 6: + Glide.with(context).load(R.drawable.marker_facet_bg1).into(holder.ivIcon); + break; + } + }else if (poiEntity.getTaskStatus()==2||poiEntity.getTaskStatus()==3||poiEntity.getTaskStatus()==4){ + switch (poiEntity.getType()){ + case 1: + Glide.with(context).load(R.drawable.graypoi).into(holder.ivIcon); + break; + case 2: + Glide.with(context).load(R.drawable.graycharge).into(holder.ivIcon); + break; + case 3: + Glide.with(context).load(R.drawable.poi_video_have_bg1).into(holder.ivIcon); + break; + case 4: + Glide.with(context).load(R.drawable.grayroad).into(holder.ivIcon); + break; + case 5: + Glide.with(context).load(R.drawable.grayother).into(holder.ivIcon); + break; + case 6: + Glide.with(context).load(R.drawable.grayfacet).into(holder.ivIcon); + break; + } + } + + holder.titer.setText(poiEntity.getName()); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + onBankClick.onClick(poiEntities.get(position)); + } + }); + } + + @Override + public int getItemCount() { + return poiEntities.size(); + } + + static class ViewHolder extends RecyclerView.ViewHolder { + TextView titer; + ImageView ivIcon; + + public ViewHolder(@NonNull @NotNull View itemView) { + super(itemView); + titer = itemView.findViewById(R.id.tv_title); + ivIcon=itemView.findViewById(R.id.iv_icon); + } + } + public interface OnBankClick { + void onClick(PoiEntity poiEntity); + } + + private OnBankClick onBankClick; + + public void setOnBankClick(OnBankClick onBankClick) { + this.onBankClick = onBankClick; + } +} diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/GatherGetFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/GatherGetFragment.java index 39dded2..53aee35 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/GatherGetFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/GatherGetFragment.java @@ -347,18 +347,22 @@ public class GatherGetFragment extends BaseFragment implements View.OnClickListe String geo = Geohash.getInstance().decode(encodeStr); chargingStationEntity.setGeoWkt(geo); Geometry geometry = GeometryTools.createGeometry(geo); - if (geometry.getGeometryType().equals("Point")) {//点 - LatLng latLng = GeometryTools.createLatLng(geo); - chargingStationEntity.setX(latLng.longitude + ""); - chargingStationEntity.setY(latLng.latitude + ""); - } else if (geometry.getGeometryType().equals("LineString")) {//线 - List latLineString = GeometryTools.getLatLngs(geo); - chargingStationEntity.setX(latLineString.get(0).longitude + ""); - chargingStationEntity.setY(latLineString.get(0).latitude + ""); - } else if (geometry.getGeometryType().equals("Polygon")) {//面 - List latPolygon = GeometryTools.getLatLngs(geo); - chargingStationEntity.setX(latPolygon.get(0).longitude + ""); - chargingStationEntity.setY(latPolygon.get(0).latitude + ""); + switch (geometry.getGeometryType()) { + case "Point": //点 + LatLng latLng = GeometryTools.createLatLng(geo); + chargingStationEntity.setX(latLng.longitude + ""); + chargingStationEntity.setY(latLng.latitude + ""); + break; + case "LineString": //线 + List latLineString = GeometryTools.getLatLngs(geo); + chargingStationEntity.setX(latLineString.get(0).longitude + ""); + chargingStationEntity.setY(latLineString.get(0).latitude + ""); + break; + case "Polygon": //面 + List latPolygon = GeometryTools.getLatLngs(geo); + chargingStationEntity.setX(latPolygon.get(0).longitude + ""); + chargingStationEntity.setY(latPolygon.get(0).latitude + ""); + break; } //充电桩 diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java index ad2fa34..e3b6b1a 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java @@ -13,7 +13,10 @@ import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; +import android.view.Gravity; import android.view.View; +import android.view.Window; +import android.view.WindowManager; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.FrameLayout; @@ -22,9 +25,13 @@ import android.widget.LinearLayout; import android.widget.Toast; import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.core.widget.NestedScrollView; import androidx.fragment.app.FragmentTransaction; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.github.lazylibrary.util.DensityUtil; import com.google.gson.Gson; @@ -41,6 +48,8 @@ import com.lzy.okgo.OkGo; import com.lzy.okgo.model.HttpParams; import com.navinfo.outdoor.R; import com.navinfo.outdoor.activity.FragmentManagement; +import com.navinfo.outdoor.activity.TestActivity; +import com.navinfo.outdoor.adapter.MarkerAdapter; import com.navinfo.outdoor.api.Constant; import com.navinfo.outdoor.base.BaseDrawerFragment; import com.navinfo.outdoor.base.BaseFragment; @@ -67,6 +76,7 @@ import com.tencent.map.geolocation.TencentLocation; import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.Projection; import com.tencent.tencentmap.mapsdk.maps.TencentMap; import com.tencent.tencentmap.mapsdk.maps.UiSettings; import com.tencent.tencentmap.mapsdk.maps.interfaces.Removable; @@ -82,6 +92,7 @@ import com.tencent.tencentmap.mapsdk.maps.model.PolygonOptions; import com.tencent.tencentmap.mapsdk.maps.model.Polyline; import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions; import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.MultiPoint; import org.greenrobot.eventbus.EventBus; @@ -90,6 +101,7 @@ import org.greenrobot.eventbus.Subscribe; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; /** @@ -107,9 +119,7 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen private ImageView ivSubmit; private ImageView ivRaffish; private SlidingUpPanelLayout sliding_layout; - // private FragmentTransaction fragmentTransaction; private ImageView ivFilter; - private Point screenPosition; //marker的屏幕坐标 private FrameLayout frameLayout; private GatherGetFragment gatherGetFragment; public ImageView ivMessage; @@ -138,7 +148,10 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen private final int MARKER_LINE = 2; private final int MARKER_FACE = 1; private final int MARKER_BIG = 4; - private boolean isBack=false; + private boolean isBack = false; + private HashMap> removableHashMap; + private ArrayList latList; + private ArrayList poiEntityArrayList; public static TreasureFragment newInstance(Bundle bundle) { @@ -160,6 +173,7 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen msg.what = Constant.FILTER_DATA_CLEAR; EventBus.getDefault().post(msg); dismissLoadingDialog(); + removableHashMap.clear(); initThread(); // 刷新筛选的本地数据 initList(Constant.currentLocation); // 刷新筛选的网络数据 } @@ -230,6 +244,10 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen removables = new ArrayList<>();//存储网络数据的marker数据(线,面,点) removablesLocality = new ArrayList<>(); //存储本地的marker数据(线,面,点) removableScreenMarker = new ArrayList<>();//存储点击屏幕上的marker的marker数据(线,面,点) + //key :wkt,value :存储的数据类型 + removableHashMap = new HashMap<>(); + //存储的多点latlng + latList = new ArrayList<>(); tencentMap.addOnMapLoadedCallback(new TencentMap.OnMapLoadedCallback() { @Override public void onMapLoaded() { @@ -259,7 +277,7 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen } else { dismissLoadingDialog(); } - Constant.markerClickListener=markerClickListener; + Constant.markerClickListener = markerClickListener; tencentMap.setOnMarkerClickListener(Constant.markerClickListener); } }); @@ -382,7 +400,7 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen } String userEncode = Geohash.getInstance().encode(tencentLocation.getLatitude(), tencentLocation.getLongitude()); OkGo.getInstance().cancelTag(this); - Log.d("TAG", "initList: "+Constant.USHERED); + Log.d("TAG", "initList: " + Constant.USHERED); showLoadingDialog(); // 请求方式和请求url HttpParams httpParams = new HttpParams(); @@ -405,9 +423,8 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen dismissLoadingDialog(); if (response.getCode() == 200) { JobSearchBean.BodyBean body = response.getBody(); - upload = response.getBody().getUpload(); - if (body != null) { + upload = response.getBody().getUpload(); if (upload != null) { ivSubmit.setEnabled(true); } else { @@ -449,13 +466,13 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen .color(Color.parseColor("#0096FF")) // 折线宽度为5像素 .width(10) + // 还可以添加描边颜色 + //.borderColor(0xffff0000) + // 描边颜色的宽度,线宽还是 25 像素,不过填充的部分宽度为 `width` - 2 * `borderWidth` + //.borderWidth(1); .arrow(true) .arrowSpacing(100) .arrowTexture(bitmapLine); - // 还可以添加描边颜色 - //.borderColor(0xffff0000) - // 描边颜色的宽度,线宽还是 25 像素,不过填充的部分宽度为 `width` - 2 * `borderWidth` - //.borderWidth(1); // 绘制折线 Polyline polyline = tencentMap.addPolyline(polylineOptions); polyline.setZIndex(MARKER_LINE); @@ -483,9 +500,6 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen latLng = new LatLng(); latLng.setLatitude(y); latLng.setLongitude(x); - /* if (latPolygon != null && latPolygon.size() > 0) { - latLng = latPolygon.get(0); - }*/ break; } switch (list.get(i).getType()) { @@ -500,6 +514,8 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen poiMarker.setZIndex(MARKER_DOT); poiMarker.setTag(listBean); removables.add(poiMarker); + String poiGeo = initGeo(latLng); + geoMarker(poiGeo, poiMarker); poiMarker.setClickable(true); break; case 2://充电站 @@ -512,6 +528,8 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen stationMarker.setZIndex(MARKER_DOT); stationMarker.setTag(listBean); removables.add(stationMarker); + String stationGeo = initGeo(latLng); + geoMarker(stationGeo, stationMarker); stationMarker.setClickable(true); break; @@ -525,6 +543,8 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen poiVideoMarker.setTag(listBean); poiVideoMarker.setZIndex(MARKER_DOT); removables.add(poiVideoMarker); + String poiVideoGeo = initGeo(latLng); + geoMarker(poiVideoGeo, poiVideoMarker); poiVideoMarker.setClickable(true); break; case 4://道路录像 @@ -537,8 +557,9 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen roadMarker.setZIndex(MARKER_DOT); roadMarker.setTag(listBean); removables.add(roadMarker); + String roadGeo = initGeo(latLng); + geoMarker(roadGeo, roadMarker); roadMarker.setClickable(true); - break; case 5://其他 BitmapDescriptor otherDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.marker_other_bg1); @@ -550,6 +571,8 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen otherMarker.setZIndex(MARKER_DOT); otherMarker.setTag(listBean); removables.add(otherMarker); + String otherGeo = initGeo(latLng); + geoMarker(otherGeo, otherMarker); otherMarker.setClickable(true); break; case 6://面状任务 @@ -562,11 +585,20 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen planarMarker.setZIndex(MARKER_DOT); planarMarker.setTag(listBean); removables.add(planarMarker); + String planarGeo = initGeo(latLng); + geoMarker(planarGeo, planarMarker); planarMarker.setClickable(true); break; } } } + latList.clear(); + for (Map.Entry> entry : removableHashMap.entrySet()) { + String key = entry.getKey(); + LatLng lng = GeometryTools.createLatLng(key); + latList.add(lng); + } + Message obtain = Message.obtain(); obtain.what = Constant.JOB_SEARCH_WORD; obtain.obj = response; @@ -585,6 +617,23 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen }); } + public String initGeo(LatLng latLng) { + return GeometryTools.createGeometry(latLng).toString(); + } + + public void geoMarker(String geo, Marker marker) { + if (!removableHashMap.containsKey(geo)) { + List markers = new ArrayList<>(); + markers.add(marker); + removableHashMap.put(geo, markers); + } else { + List markers = removableHashMap.get(geo); + assert markers != null; + markers.add(marker); + removableHashMap.put(geo, markers); + } + } + public void initMarker(PoiEntity poiEntity, boolean aBoolean) { String geo = poiEntity.getGeoWkt(); Log.d("TAG", "onSuccess: " + geo); @@ -592,12 +641,10 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen if (geometry == null) { return; } - for (int i = 0; i < removableScreenMarker.size(); i++) { removableScreenMarker.get(i).remove(); } removableScreenMarker.clear(); - LatLng latLng = null; switch (geometry.getGeometryType()) { case "Point": //点 @@ -623,10 +670,6 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen .arrow(true) .arrowSpacing(150) .arrowTexture(bitmapLine); - /* // 还可以添加描边颜色 - .borderColor(0xffff0000) - // 描边颜色的宽度,线宽还是 25 像素,不过填充的部分宽度为 `width` - 2 * `borderWidth` - .borderWidth(1);*/ // 绘制折线 Polyline polyline = tencentMap.addPolyline(polylineOptions); polyline.setZIndex(MARKER_LINE); @@ -655,9 +698,6 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen latLng = new LatLng(); latLng.setLatitude(y); latLng.setLongitude(x); - /* if (latPolygon != null && latPolygon.size() > 0) { - latLng = latPolygon.get(0); - }*/ break; } BitmapDescriptor descriptor = null; @@ -701,7 +741,6 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen fragmentTransaction.replace(R.id.frame_layout, gatherGetFragment); fragmentTransaction.commit(); } - } private void initThread() { @@ -714,7 +753,7 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen List allTaskStatus = poiDao.getAllTaskStatus(taskStatus, taskStatus, type, type, limit, limit); //List allTaskStatus = poiDao.getAllPoi(); List allPoiStatus = poiDao.getAllPoiStatus(); - if (allPoiStatus!=null){ + if (allPoiStatus != null) { poiDao.deleteAll(allPoiStatus); } Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() { @@ -755,10 +794,6 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen .arrow(true) .arrowSpacing(100) .arrowTexture(bitmapLine); - /* // 还可以添加描边颜色 - .borderColor(0xffff0000) - // 描边颜色的宽度,线宽还是 25 像素,不过填充的部分宽度为 `width` - 2 * `borderWidth` - .borderWidth(1);*/ // 绘制折线 Polyline polyline = tencentMap.addPolyline(polylineOptions); polyline.setZIndex(MARKER_LINE); @@ -814,6 +849,8 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen poiMarker.setTitle(poiEntity.getName() + ""); poiMarker.setTag(poiEntity); removablesLocality.add(poiMarker); + String poiGeo = initGeo(latLng); + geoMarker(poiGeo, poiMarker); break; case 2://充电站 BitmapDescriptor chargeDescriptor = null; @@ -832,6 +869,8 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen stationMarker.setTitle(poiEntity.getName() + ""); stationMarker.setTag(poiEntity); removablesLocality.add(stationMarker); + String stationGeo = initGeo(latLng); + geoMarker(stationGeo, stationMarker); break; case 3://poi录像 BitmapDescriptor poiVideoDescriptor = null; @@ -850,6 +889,8 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen poiVideoMarker.setTitle(poiEntity.getName() + ""); poiVideoMarker.setTag(poiEntity); removablesLocality.add(poiVideoMarker); + String poiVideoGeo = initGeo(latLng); + geoMarker(poiVideoGeo, poiVideoMarker); break; case 4://道路录像 BitmapDescriptor roadDescriptor = null; @@ -868,6 +909,8 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen roadMarker.setTitle(poiEntity.getName() + ""); roadMarker.setTag(poiEntity); removablesLocality.add(roadMarker); + String roadGeo = initGeo(latLng); + geoMarker(roadGeo, roadMarker); break; case 5://其他 BitmapDescriptor otherDescriptor = null; @@ -886,6 +929,8 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen otherMarker.setTitle(poiEntity.getName() + ""); otherMarker.setTag(poiEntity); removablesLocality.add(otherMarker); + String otherGeo = initGeo(latLng); + geoMarker(otherGeo, otherMarker); break; case 6://面状任务 BitmapDescriptor Descriptor = null; @@ -904,6 +949,8 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen planarMarker.setTitle(poiEntity.getName() + ""); planarMarker.setTag(poiEntity); removablesLocality.add(planarMarker); + String planarGeo = initGeo(latLng); + geoMarker(planarGeo, planarMarker); break; } } @@ -1025,8 +1072,8 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen fragmentTransaction.commit(); } PoiEntity poiEntity = (PoiEntity) data.obj; - initMarker(poiEntity,true); - } else if (data.what == Constant.GATHER_GET_MAP) { //地图界面点击采集 点击开始采集 + initMarker(poiEntity, true); + } else if (data.what == Constant.GATHER_GET_MAP) { //地图界面点击采集 点击开始采集 if (bigMarker != null) { bigMarker.setVisible(false); } @@ -1062,31 +1109,7 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen fragmentTransaction.remove(gatherGetFragment); fragmentTransaction.commit(); } - }/* else if (data.what == Constant.TREASURE_WORD) { // POI采集-移动位置 - initPoiMarker((LatLng) data.obj); - } else if (data.what == Constant.TREASURE_CHECKED_WORD) {//poi采集 -确定位置 - if ((boolean) data.obj) { - initCheckedMarker(Constant.POI_WORD); - } - } else if (data.what == Constant.MAIN_CHARGING_STATION) {//充电站采集-移动位置 - initPoiMarker((LatLng) data.obj); - } else if (data.what == Constant.MAIN_CHARGING_CHECKED_STATION) {//充电站采集 -确定位置 - if ((boolean) data.obj) { - initCheckedMarker(Constant.CHARGING_STATION_WORD); - } - }*//* else if (data.what == Constant.MAIN_CHARGING_PILE) {//充电桩采集-移动位置 - initPileMarker((LatLng) data.obj); - } else if (data.what == Constant.MAIN_CHARGING_CHECKED_PILE) {//充电桩采集-确定位置 - if ((boolean) data.obj) { - initCheckedPileMarker(Constant.CHARGING_PILE_WORD); - } - }*//* else if (data.what == Constant.MAIN_OTHER) {//其他采集-移动位置 - initPoiMarker((LatLng) data.obj); - } else if (data.what == Constant.MAIN_CHECKED_OTHER) {//其他采集-确定位置 - if ((boolean) data.obj) { - initCheckedMarker(Constant.OTHER_WORD); - } - }*/ else if (data.what == Constant.TREASURE_FRAGMENT) {//抽屉界面的展示和隐藏 + } else if (data.what == Constant.TREASURE_FRAGMENT) {//抽屉界面的展示和隐藏 if ((boolean) data.obj) { frameLayout.setVisibility(View.GONE); sliding_layout.setPanelHeight(0); @@ -1156,7 +1179,7 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen removableScreenMarker.clear(); refreshFilterData(); } - } else if (data.what == Constant.EVENT_WHAT_COMPLETE_TASK) { + } else if (data.what == Constant.EVENT_WHAT_COMPLETE_TASK) { PoiEntity poiEntity = (PoiEntity) data.obj; Bundle bundle = new Bundle(); bundle.putBoolean("isSliding", true); // 通知抽屉不收回 @@ -1372,7 +1395,7 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen ToastUtil.showShort(getContext(), "无法获取当前位置,请检查GPS是否打开!"); return; } -// LatLng mapCenterPoint = getMapCenterPoint(); + //LatLng mapCenterPoint = getMapCenterPoint(); LatLng newPoiLatLng = new LatLng(Constant.currentLocation.getLatitude(), Constant.currentLocation.getLongitude()); poiEntity.setX(newPoiLatLng.getLongitude() + ""); poiEntity.setY(newPoiLatLng.getLatitude() + ""); @@ -1519,9 +1542,60 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen TencentMap.OnMarkerClickListener markerClickListener = new TencentMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { - FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction(); - if (marker.getTitle() != null && !marker.getTitle().equals("")) {//是本地数据直接跳转到采集页面 - PoiEntity poiEntity = (PoiEntity) marker.getTag(); + LatLng latLng = marker.getPosition(); + ArrayList lngArrayList = new ArrayList<>();//存储的是内部的屏幕点坐标 + Projection projection = tencentMap.getProjection(); + android.graphics.Point point = projection.toScreenLocation(latLng);//转换为屏幕坐标 + int minX = point.x - 200; + int minY = point.y - 200; + int maxX = point.x + 200; + int maxY = point.y + 200; + point.set(minX, minY); + lngArrayList.add(new LatLng(projection.fromScreenLocation(point))); + point.set(maxX, minY); + lngArrayList.add(new LatLng(projection.fromScreenLocation(point))); + point.set(maxX, maxY); + lngArrayList.add(new LatLng(projection.fromScreenLocation(point))); + point.set(minX, maxY); + lngArrayList.add(new LatLng(projection.fromScreenLocation(point))); + point.set(minX, minY); + lngArrayList.add(new LatLng(projection.fromScreenLocation(point))); + poiEntityArrayList = new ArrayList<>(); + com.vividsolutions.jts.geom.Polygon polygon = GeometryTools.createPolygon(lngArrayList); + //多点 + MultiPoint multiPoint = GeometryTools.createMultiPoint(latList); + //拿到覆蓋點 + Geometry intersection = polygon.intersection(multiPoint); + if (intersection == null) { + initEntity(marker, true); + } else { + if (intersection.getGeometryType().equals("MultiPoint")) { + List latList = GeometryTools.getLatList(intersection); + for (int i = 0; i < latList.size(); i++) { + LatLng latL = latList.get(i); + Geometry geometry = GeometryTools.createGeometry(latL); + Log.d("TAG", "onMarkerClick: " + geometry.toString()); + List markerList = removableHashMap.get(geometry.toText()); + if (markerList != null) { + for (Marker mar : markerList) { + initEntity(mar, false); + } + } + } + customDialog(poiEntityArrayList, marker); + } else { + initEntity(marker, true); + } + } + return false; + } + }; + + private void initEntity(Marker marker, boolean isBack) { + FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction(); + if (marker.getTitle() != null && !marker.getTitle().equals("")) {//是本地数据直接跳转到采集页面 + PoiEntity poiEntity = (PoiEntity) marker.getTag(); + if (isBack) { frameLayout.setVisibility(View.GONE); if (gatherGetFragment != null) { fragmentTransaction.remove(gatherGetFragment); @@ -1533,100 +1607,9 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen removableScreenMarker.get(i).remove(); } removableScreenMarker.clear(); - if (poiEntity.getTaskStatus()==1){//已领取 + if (poiEntity.getTaskStatus() == 1) {//已领取 initMarker(poiEntity, true); - switch (poiEntity.getType()){ - case 1: - case 2: - case 5: - marker.remove(); - break; - - case 3: - case 4: - case 6: - break; - } - }else { - Bundle bundle = new Bundle(); - bundle.putSerializable("poiEntity", poiEntity); switch (poiEntity.getType()) { - case 1: - initMarker(poiEntity,false); - PoiFragment poiFragment = PoiFragment.newInstance(bundle); - showSlidingFragment(poiFragment); - marker.remove(); - break; - case 2: - - initMarker(poiEntity,false); - ChargingStationFragment chargingStationFragment = ChargingStationFragment.newInstance(bundle); - showSlidingFragment(chargingStationFragment); - marker.remove(); - break; - case 3: - - initMarker(poiEntity,false); - PoiVideoFragment poiVideoFragment = PoiVideoFragment.newInstance(bundle); - showSlidingFragment(poiVideoFragment); - marker.remove(); - break; - case 4: - - initMarker(poiEntity,false); - RoadFragment roadFragment = RoadFragment.newInstance(bundle); - showSlidingFragment(roadFragment); - marker.remove(); - break; - case 5: - initMarker(poiEntity,false); - OtherFragment otherFragment = OtherFragment.newInstance(bundle); - showSlidingFragment(otherFragment); - marker.remove(); - break; - case 6: - initMarker(poiEntity, true); - break; - } - } - } else { - JobSearchBean.BodyBean.ListBean listBean = (JobSearchBean.BodyBean.ListBean) marker.getTag(); - if (listBean != null) { - PoiEntity poiListEntity = new PoiEntity(); - poiListEntity.setTaskId(listBean.getId()); - poiListEntity.setGeoWkt(listBean.getGeo()); - poiListEntity.setName(listBean.getName()); - poiListEntity.setAddress(listBean.getAddress()); - poiListEntity.setTelPhone(listBean.getTelephone() + ""); - poiListEntity.setPrecision(listBean.getPrice() + ""); - poiListEntity.setDist(listBean.getDist() + ""); - poiListEntity.setDescribe(listBean.getMemo()); - poiListEntity.setCreateTime(listBean.getEndDate()); - poiListEntity.setType(listBean.getType()); - String geo = listBean.getGeo(); - poiListEntity.setGeoWkt(geo); - Geometry geometry = GeometryTools.createGeometry(geo); - switch (geometry.getGeometryType()) { - case "Point": //点 - LatLng latLng = GeometryTools.createLatLng(geo); - poiListEntity.setX(latLng.longitude + ""); - poiListEntity.setY(latLng.latitude + ""); - break; - case "LineString": //线 - List latLineString = GeometryTools.getLatLngs(geo); - assert latLineString != null; - poiListEntity.setX(latLineString.get(0).longitude + ""); - poiListEntity.setY(latLineString.get(0).latitude + ""); - break; - case "Polygon": //面 - List latPolygon = GeometryTools.getLatLngs(geo); - assert latPolygon != null; - poiListEntity.setX(latPolygon.get(0).longitude + ""); - poiListEntity.setY(latPolygon.get(0).latitude + ""); - break; - } - initMarker(poiListEntity, true); - switch (listBean.getType()){ case 1: case 2: case 5: @@ -1638,12 +1621,101 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen break; } } else { - Toast.makeText(getActivity(), "数据为空", Toast.LENGTH_SHORT).show(); + Bundle bundle = new Bundle(); + bundle.putSerializable("poiEntity", poiEntity); + switch (poiEntity.getType()) { + case 1: + initMarker(poiEntity, false); + PoiFragment poiFragment = PoiFragment.newInstance(bundle); + showSlidingFragment(poiFragment); + marker.remove(); + break; + case 2: + initMarker(poiEntity, false); + ChargingStationFragment chargingStationFragment = ChargingStationFragment.newInstance(bundle); + showSlidingFragment(chargingStationFragment); + marker.remove(); + break; + case 3: + + initMarker(poiEntity, false); + PoiVideoFragment poiVideoFragment = PoiVideoFragment.newInstance(bundle); + showSlidingFragment(poiVideoFragment); + marker.remove(); + break; + case 4: + initMarker(poiEntity, false); + RoadFragment roadFragment = RoadFragment.newInstance(bundle); + showSlidingFragment(roadFragment); + marker.remove(); + break; + case 5: + initMarker(poiEntity, false); + OtherFragment otherFragment = OtherFragment.newInstance(bundle); + showSlidingFragment(otherFragment); + marker.remove(); + break; + case 6: + initMarker(poiEntity, true); + break; + } } + } else { + poiEntityArrayList.add(poiEntity); + } + + } else { + JobSearchBean.BodyBean.ListBean listBean = (JobSearchBean.BodyBean.ListBean) marker.getTag(); + if (listBean != null) { + PoiEntity poiListEntity = new PoiEntity(); + poiListEntity.setTaskId(listBean.getId()); + poiListEntity.setGeoWkt(listBean.getGeo()); + poiListEntity.setName(listBean.getName()); + poiListEntity.setAddress(listBean.getAddress()); + poiListEntity.setTelPhone(listBean.getTelephone()); + poiListEntity.setPrecision(listBean.getPrice() + ""); + poiListEntity.setDist(listBean.getDist() + ""); + poiListEntity.setDescribe(listBean.getMemo()); + poiListEntity.setCreateTime(listBean.getEndDate()); + poiListEntity.setType(listBean.getType()); + String geo = listBean.getGeo(); + poiListEntity.setGeoWkt(geo); + Geometry geometry = GeometryTools.createGeometry(geo); + switch (geometry.getGeometryType()) { + case "Point": //点 + LatLng lng = GeometryTools.createLatLng(geo); + poiListEntity.setX(lng.longitude + ""); + poiListEntity.setY(lng.latitude + ""); + break; + case "LineString": //线 + case "Polygon": //面 + List latLineString = GeometryTools.getLatLngs(geo); + assert latLineString != null; + poiListEntity.setX(latLineString.get(0).longitude + ""); + poiListEntity.setY(latLineString.get(0).latitude + ""); + break; + } + if (isBack) { + initMarker(poiListEntity, true); + switch (listBean.getType()) { + case 1: + case 2: + case 5: + marker.remove(); + break; + case 3: + case 4: + case 6: + break; + } + } else { + poiEntityArrayList.add(poiListEntity); + } + } else { + Toast.makeText(getActivity(), "数据为空", Toast.LENGTH_SHORT).show(); } - return false; } - }; + } @Override @@ -1655,8 +1727,6 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen } else { Objects.requireNonNull(getActivity()).finish(); } - - return true; } @@ -1664,18 +1734,121 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen * 获取屏幕中心点位置 */ public LatLng getMapCenterPoint() { -// int left = treasureMap.getLeft(); -// int top = treasureMap.getTop(); -// int right = treasureMap.getRight(); -// int bottom = treasureMap.getBottom(); -// // 获得屏幕点击的位置 -// int x = (int) (treasureMap.getX() + (right - left) / 2); -// int y = (int) (treasureMap.getY() + (bottom - top) / 2); -// Projection projection = tangentMap.getProjection(); -// LatLng pt = projection.fromScreenLocation(new Point(x, y)); return tencentMap.getCameraPosition().target; } + /** + * 自定义dialog + */ + public void customDialog(List list, Marker marker) { + AlertDialog.Builder builder = new AlertDialog.Builder(Objects.requireNonNull(getActivity())); + final AlertDialog dialog = builder.create(); + View dialogView = View.inflate(getActivity(), R.layout.layout_marker_dialog, null); + dialog.setView(dialogView); + Window win = dialog.getWindow(); + assert win != null; + win.setGravity(Gravity.BOTTOM); // 这里控制弹出的位置 + win.getDecorView().setPadding(0, 0, 0, 0); + WindowManager.LayoutParams lp = win.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + lp.height = WindowManager.LayoutParams.WRAP_CONTENT; + dialog.getWindow().setBackgroundDrawable(null); + win.setAttributes(lp); + dialog.show(); + RecyclerView recyclerView = dialogView.findViewById(R.id.rv_marker_view); + + recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); + recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL)); + MarkerAdapter markerAdapter = new MarkerAdapter(list, getActivity()); + recyclerView.setAdapter(markerAdapter); + markerAdapter.setOnBankClick(new MarkerAdapter.OnBankClick() { + @Override + public void onClick(PoiEntity poiEntity) { + FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction(); + if (poiEntity.getTaskStatus() == 0) {//网络未领取, + initMarker(poiEntity, true); + switch (poiEntity.getType()) { + case 1: + case 2: + case 5: + marker.remove(); + break; + case 3: + case 4: + case 6: + break; + } + } else if (poiEntity.getTaskStatus() == 1 || poiEntity.getTaskStatus() == 2 || poiEntity.getTaskStatus() == 3 || poiEntity.getTaskStatus() == 4) {//本地数据 或已领取的数据 + frameLayout.setVisibility(View.GONE); + if (gatherGetFragment != null) { + fragmentTransaction.remove(gatherGetFragment); + } + if (bigMarker != null) { + bigMarker.setVisible(false); + } + for (int i = 0; i < removableScreenMarker.size(); i++) { + removableScreenMarker.get(i).remove(); + } + removableScreenMarker.clear(); + if (poiEntity.getTaskStatus() == 1) {//已领取 + initMarker(poiEntity, true); + switch (poiEntity.getType()) { + case 1: + case 2: + case 5: + marker.remove(); + break; + case 3: + case 4: + case 6: + break; + } + } else { + Bundle bundle = new Bundle(); + bundle.putSerializable("poiEntity", poiEntity); + switch (poiEntity.getType()) { + case 1: + initMarker(poiEntity, false); + PoiFragment poiFragment = PoiFragment.newInstance(bundle); + showSlidingFragment(poiFragment); + marker.remove(); + break; + case 2: + initMarker(poiEntity, false); + ChargingStationFragment chargingStationFragment = ChargingStationFragment.newInstance(bundle); + showSlidingFragment(chargingStationFragment); + marker.remove(); + break; + case 3: + initMarker(poiEntity, false); + PoiVideoFragment poiVideoFragment = PoiVideoFragment.newInstance(bundle); + showSlidingFragment(poiVideoFragment); + marker.remove(); + break; + case 4: + initMarker(poiEntity, false); + RoadFragment roadFragment = RoadFragment.newInstance(bundle); + showSlidingFragment(roadFragment); + marker.remove(); + break; + case 5: + initMarker(poiEntity, false); + OtherFragment otherFragment = OtherFragment.newInstance(bundle); + showSlidingFragment(otherFragment); + marker.remove(); + break; + case 6: + initMarker(poiEntity, true); + break; + } + } + } + dialog.dismiss(); + } + }); + } + + @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); diff --git a/app/src/main/java/com/navinfo/outdoor/http/HttpInterface.java b/app/src/main/java/com/navinfo/outdoor/http/HttpInterface.java index 92c8979..f44a88a 100644 --- a/app/src/main/java/com/navinfo/outdoor/http/HttpInterface.java +++ b/app/src/main/java/com/navinfo/outdoor/http/HttpInterface.java @@ -7,6 +7,8 @@ public class HttpInterface { public static final String DATA_IP = "http://172.23.139.4:9999/m4";//接口 public static final String TEST_IP = "http://dtxbmaps.navinfo.com/dtxb_test/m4";//测试接口 public static final String TEST_GUIDANCE_IP = "http://172.21.98.90:9999/m4";//引导页完成接口 + public static final String APKIP = "http://172.23.139.4:8001/"; + public static final String USER_PATH = "/user/";//我的 @@ -19,22 +21,27 @@ public class HttpInterface { */ //dtxbmaps.navinfo.com/dtxb/m4/user/appVersion/checkVersion?version=155&operationType=android //172.23.139.4:8001/appVersion/checkVersion?version=155&operationType=android version是版本 operationType固定值 安卓 get - public static String APKIP = "http://172.23.139.4:8001/"; - public static final String APP_CHECK_VERSION = IP + USER_PATH + "appVersion/1/checkVersion"; //版本升级 + public static String APP_CHECK_VERSION ; //版本升级 + + public static void initAppPath(String userId) { + APP_CHECK_VERSION = TEST_IP + USER_PATH + "appVersion/"+userId+"/checkVersion"; //版本升级 + + } + /** * 我的 * Path=/m4/user/* */ //172.23.139.4:8001/m4/user/update - public static String USER_UPDATE ;//用户资料 + public static String USER_UPDATE;//用户资料 //172.23.139.4:8001/m4/userBankcard/update - public static String USER_BANKCARD_UP_DATA ; //绑定银行卡 + public static String USER_BANKCARD_UP_DATA; //绑定银行卡 //172.23.139.4:8001/m4/userAuth/add public static String USER_AUTH_ADD; //实名认证 //172.23.139.4:9999/m4/user/userLocation/1/userLocation post 参数 geom:geohash加密 - public static String USER_LOCATION ; //上传用户坐标 + public static String USER_LOCATION; //上传用户坐标 //dtxbmaps.navinfo.com/dtxb/m4/user/user/1/getUserDetailByUserid/1?datetime=1628749294718 - public static String USER_DETAIL_BY_USER_ID ; //获取用户信息 + public static String USER_DETAIL_BY_USER_ID; //获取用户信息 //http://172.21.98.90:9999/m4/user/userGuide/1/insertUserGuide public static String INSERT_USER_GUIDE;//引导页完成接口 /** @@ -42,26 +49,26 @@ public class HttpInterface { * Path=/m4/msgList/** */ // public static String IP1 = "http://dtxbmaps.navinfo.com/dtxb/msg/"; - public static String MSG_CONTENT ;//发现 -富文本详情页请求 - public static String LIST_TASK ;//任务专区 + public static String MSG_CONTENT;//发现 -富文本详情页请求 + public static String LIST_TASK;//任务专区 public static String LIST_EVENT;//活动专区 - public static String LIST_TASK_EXPLAIN ;//任务说明 + public static String LIST_TASK_EXPLAIN;//任务说明 //http://172.23.139.4:8002/findAndMessage/1/msg_list?fid=1&pageNum=1&pageSize=2 - public static String MSG_LISt ;//发现查询接口 + public static String MSG_LISt;//发现查询接口 //http://172.23.139.4:8002/findAndMessage/1/exam_content?id=11 public static String EXAM_CONTENT;//发现 -能力测评获取试题接口 //http://172.23.139.4:8002/findAndMessage/1/submitExam - public static String EXAM_SUBMIT ;//发现 -能力测评提交试卷 post + public static String EXAM_SUBMIT;//发现 -能力测评提交试卷 post /** * 登录 * Path=/m4/userlogin/** */ //http://172.23.139.4:9999/m4/userlogin/oauth/token - public static String USER_LOGIN_OAUTH_TOKEN= TEST_IP + USER_LOGIN_PATH + "oauth/token" ; //登录接口 + public static String USER_LOGIN_OAUTH_TOKEN = TEST_IP + USER_LOGIN_PATH + "oauth/token"; //登录接口 ///m4/user/user/register - public static String USER_REGISTER= TEST_IP + USER_PATH + "user/register" ;//注册接口 + public static String USER_REGISTER = TEST_IP + USER_PATH + "user/register";//注册接口 ///m4/user/ phone/message - public static String USER_MESSAGE= TEST_IP + USER_PATH + "phone/message" ;//获取验证码 type 1:注册获取 2:更新 + public static String USER_MESSAGE = TEST_IP + USER_PATH + "phone/message";//获取验证码 type 1:注册获取 2:更新 ///m4/user/user/forgetPassword public static String USER_FORGET_PASSWORD = TEST_IP + USER_PATH + "user/forgetPassword";//忘记密码 @@ -72,62 +79,63 @@ public class HttpInterface { * Path=/m4/price/** */ //http://172.23.139.4:8004/userPrice/1/getPrice - public static String GET_PRICE ;//我的-总资产 + public static String GET_PRICE;//我的-总资产 //http://172.23.139.4:8004/userPrice/1/userPriceExchange?exchangeMoney=10&payType=1 - public static String USER_PRICE_EXCHANGE ;//我的-财务信息-提现 + public static String USER_PRICE_EXCHANGE;//我的-财务信息-提现 //dtxbmaps.navinfo.com/dtxb/m4/price/priceExchange/1/getList?datetime=1628647356815 - public static String PRICE_EXCHANGE ;//提现记录 + public static String PRICE_EXCHANGE;//提现记录 /** * 任务 * Path=/m4/task/** */ //172.23.139.4:8003/m4/task/1/getList - public static String TASK_LIST ; //任务搜索 + public static String TASK_LIST; //任务搜索 //172.23.139.4:8003/othertask/1/receivedOthertask - public static String RECEIVED_OTHER_TASK ;//其他-领取任务 + public static String RECEIVED_OTHER_TASK;//其他-领取任务 //172.23.139.4:8003/poitask/1/receivedPoitask/1 - public static String RECEIVED_POI_TASK ;//poi-领取任务 + public static String RECEIVED_POI_TASK;//poi-领取任务 //172.23.139.4:8003/poitask/1/submitPoitask?taskId=5001&name=测试修改名称&address=测试修改地址&existence=1&geo=1rn7exd5uhxy&memo=测试备注...33. - public static String SUBMIT_POI_TASK ;//poi-保存本地 + public static String SUBMIT_POI_TASK;//poi-保存本地 //172.23.139.4:8003/othertask/1/submitOhtertask?taskId=5001&name=测试修改名称&address=测试修改地址&existence=1&geo=1rn7exd5uhxy&memo=测试备注 - public static String SUBMIT_OTHER_TASK ;//其他-保存本地 + public static String SUBMIT_OTHER_TASK;//其他-保存本地 //172.23.139.4:8003/othertask/1/uploadpic public static String OTHER_TASK_UPLOAD_PIC;//其他-上传 //172.23.139.4:8003/ctask/1/receivedCtask/8608 - public static String RECEIVED_CTASK ;//充电站-领取任务 + public static String RECEIVED_CTASK;//充电站-领取任务 //172.23.139.4:8003/ctask/1/submitCtask?id=8608&name=充电站&address=地址&telephone=18812345678|14712345678&geo=1rn7exd5uhxy&memo=测试备注&sptype=1 - public static String SUBMIT_CTASK ;//充电站-保存本地 + public static String SUBMIT_CTASK;//充电站-保存本地 //172.23.139.4:8003/cstask/1/submitCstask?taskId=0&name=充电站&geo=1rn7exd5uhxy&memo=测试备注&sptype=1&ffid=104&existence=1&detail={"cp_openType":"1,2","cp_floor":1,"cp_availableState":0,"sign_exist":0} - public static String SUBMIT_CSTASK ;//充电桩保存 + public static String SUBMIT_CSTASK;//充电桩保存 //172.23.139.4:8003/poitask/1/uploadpic - public static String POI_TASK_UPLOAD_PIC ;//poi-上传 + public static String POI_TASK_UPLOAD_PIC;//poi-上传 //172.23.139.4:8003/roadtask/1/receivedRoadtask/8569 - public static String RECEIVED_ROAD_TASK ;//道路任务获取 + public static String RECEIVED_ROAD_TASK;//道路任务获取 //172.23.139.4:8003/poivideotask/1/receivedPoivideotask/8569 - public static String RECEIVED_POI_VIDEO_TASK ;//poi录像任务获取 + public static String RECEIVED_POI_VIDEO_TASK;//poi录像任务获取 // 172.23.139.4:8003/poivideotask/1/submitPoivideotask - public static String INSIDE_API_LIST ;//poi录像 保存 + public static String INSIDE_API_LIST;//poi录像 保存 //172.23.139.4:8003/poivideotask/1/uploadpic public static String POI_VIDEO_UPLOAD_PIC;//poi录像-上传 //172.23.139.4:8003/roadtask/1/submitRoadtask?taskId=0&name=段哥&address=二娃&memo=1rn7exd5uhxy&workType=2 - public static String ROAD_TASK_SUBMIT ;//道路录像-保存本地 + public static String ROAD_TASK_SUBMIT;//道路录像-保存本地 //172.23.139.4:8003/roadtask/1/uploadpic - public static String ROAD_TASK_UPLOAD_PIC ;//道路录像—上传 + public static String ROAD_TASK_UPLOAD_PIC;//道路录像—上传 //http://172.23.139.4:8003/m4/task/1/getPhone?geo=1rn7exd5uhxy - public static String GET_PHONES ;//电话区号和电话位数 + public static String GET_PHONES;//电话区号和电话位数 //172.23.139.4:8003/cstask/1/uploadpic public static String CS_TASK_UP_LOAD_PIC;//充电桩-上传 //172.23.139.4:8003/ctask/1/uploadpic - public static String C_TASK_UP_LOAD_PIC ;//充电站-上传 + public static String C_TASK_UP_LOAD_PIC;//充电站-上传 //172.23.139.4:8003/m4/task/1/taskName?geo=1rn7exd5uhxy&name=四维 - public static String TASK_NAME ;//poi-查重 + public static String TASK_NAME;//poi-查重 //172.23.139.4:8003/m4/task/1/getCommitList?type=2&pageSize=10&pageNum=1 - public static String GET_COMMIT_LIST ;//紀錄——已提交 - public static String RECEIVED_POLYGON_TASK ; //面状任务任务领取 + public static String GET_COMMIT_LIST;//紀錄——已提交 + public static String RECEIVED_POLYGON_TASK; //面状任务任务领取 //172.23.139.4:8003/m4/task/1/unReceivedTask?taskIds=&auditIds=214,278 取消领取的接口 - public static String UNRECEIVED_POLYGON_TASK ;//所有類型结束领取 - public static String COMPLETE ;//面状任务结束领取 - public static String SUBMIT_POLYGON_TASK ;//面状任务开始采集 + public static String UNRECEIVED_POLYGON_TASK;//所有類型结束领取 + public static String COMPLETE;//面状任务结束领取 + public static String SUBMIT_POLYGON_TASK;//面状任务开始采集 + public static void initHttpInter(String USERID) { /** * 我的 @@ -144,7 +152,7 @@ public class HttpInterface { //dtxbmaps.navinfo.com/dtxb/m4/user/user/1/getUserDetailByUserid/1?datetime=1628749294718 USER_DETAIL_BY_USER_ID = TEST_IP + USER_PATH + "user/" + USERID + "/getUserDetailByUserid/" + USERID; //获取用户信息 //http://172.21.98.90:9999/m4/user/userGuide/1/insertUserGuide - INSERT_USER_GUIDE=TEST_IP +USER_PATH+"userGuide/"+USERID+"/insertUserGuide";//引导页完成接口 + INSERT_USER_GUIDE = TEST_IP + USER_PATH + "userGuide/" + USERID + "/insertUserGuide";//引导页完成接口 /** * 发现 * Path=/m4/msgList/** @@ -225,7 +233,6 @@ public class HttpInterface { } - /** * public static String IPm8 = "http://172.23.139.4:8003/m4/"; * http://172.23.139.4:8003/m4/task/1/unReceivedTask?taskIds=&auditIds=214,278 diff --git a/app/src/main/java/com/navinfo/outdoor/util/GeometryTools.java b/app/src/main/java/com/navinfo/outdoor/util/GeometryTools.java index cbc0e28..04a9c52 100644 --- a/app/src/main/java/com/navinfo/outdoor/util/GeometryTools.java +++ b/app/src/main/java/com/navinfo/outdoor/util/GeometryTools.java @@ -555,6 +555,21 @@ public class GeometryTools { return list; } + public static List getLatList(Geometry geo){ + List list = null; + Coordinate[] coordinates = geo.getCoordinates(); + if (coordinates != null && coordinates.length > 0) { + list = new ArrayList(); + for (Coordinate coor : coordinates) { + list.add(new LatLng(coor.y, coor.x)); + } + } + return list; + } + + + + public static Coordinate[] getLatLngs2(String str) { Coordinate[] coordinates = null; if (str == null || str.trim().equals("")) diff --git a/app/src/main/res/layout/item_marker.xml b/app/src/main/res/layout/item_marker.xml new file mode 100644 index 0000000..6968718 --- /dev/null +++ b/app/src/main/res/layout/item_marker.xml @@ -0,0 +1,28 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_marker_dialog.xml b/app/src/main/res/layout/layout_marker_dialog.xml new file mode 100644 index 0000000..93c0879 --- /dev/null +++ b/app/src/main/res/layout/layout_marker_dialog.xml @@ -0,0 +1,18 @@ + + + + + \ No newline at end of file