update 3.29
Showing
12 changed files
with
434 additions
and
214 deletions
... | @@ -17,7 +17,11 @@ | ... | @@ -17,7 +17,11 @@ |
17 | android:supportsRtl="true" | 17 | android:supportsRtl="true" |
18 | android:theme="@style/AppTheme"> | 18 | android:theme="@style/AppTheme"> |
19 | <activity android:name=".BootActivity"> | 19 | <activity android:name=".BootActivity"> |
20 | <intent-filter> | ||
21 | <action android:name="android.intent.action.MAIN" /> | ||
20 | 22 | ||
23 | <category android:name="android.intent.category.LAUNCHER" /> | ||
24 | </intent-filter> | ||
21 | </activity> | 25 | </activity> |
22 | <activity | 26 | <activity |
23 | android:name=".MainActivity" | 27 | android:name=".MainActivity" |
... | @@ -26,11 +30,7 @@ | ... | @@ -26,11 +30,7 @@ |
26 | android:theme="@style/AppTheme.NoActionBar"> <!-- 禁止屏幕旋转 --> | 30 | android:theme="@style/AppTheme.NoActionBar"> <!-- 禁止屏幕旋转 --> |
27 | </activity> | 31 | </activity> |
28 | <activity android:name=".GoogleMapActivity"> | 32 | <activity android:name=".GoogleMapActivity"> |
29 | <intent-filter> | ||
30 | <action android:name="android.intent.action.MAIN" /> | ||
31 | 33 | ||
32 | <category android:name="android.intent.category.LAUNCHER" /> | ||
33 | </intent-filter> | ||
34 | </activity> | 34 | </activity> |
35 | </application> | 35 | </application> |
36 | 36 | ... | ... |
... | @@ -28,15 +28,17 @@ public class GoogleMapActivity extends AppCompatActivity { | ... | @@ -28,15 +28,17 @@ public class GoogleMapActivity extends AppCompatActivity { |
28 | super.onCreate(savedInstanceState); | 28 | super.onCreate(savedInstanceState); |
29 | setContentView(R.layout.activity_google_map); | 29 | setContentView(R.layout.activity_google_map); |
30 | 30 | ||
31 | AppInfo.Settings(); | ||
32 | |||
31 | ArcGISRuntime.setClientId("1eFHW78avlnRUPHm"); | 33 | ArcGISRuntime.setClientId("1eFHW78avlnRUPHm"); |
32 | mapView = (MapView) findViewById(R.id.map); | 34 | mapView = (MapView) findViewById(R.id.map); |
33 | mapView.setEsriLogoVisible(false); | 35 | mapView.setEsriLogoVisible(false); |
34 | mapView.enableWrapAround(false); | 36 | mapView.enableWrapAround(false); |
35 | 37 | ||
36 | GoogleMapsTiledServiceLayer GOOGLE_VECTOR_Layer = new GoogleMapsTiledServiceLayer(GoogleMapLayerTypes.VECTOR_GOOGLE_MAP); | 38 | // GoogleMapsTiledServiceLayer GOOGLE_VECTOR_Layer = new GoogleMapsTiledServiceLayer(GoogleMapLayerTypes.VECTOR_GOOGLE_MAP); |
37 | // GoogleMapsTiledServiceLayer GOOGLE_TER_Layer = new GoogleMapsTiledServiceLayer(GoogleMapLayerTypes.TERRAIN_GOOGLE_MAP); | 39 | // GoogleMapsTiledServiceLayer GOOGLE_TER_Layer = new GoogleMapsTiledServiceLayer(GoogleMapLayerTypes.TERRAIN_GOOGLE_MAP); |
38 | // GoogleMapsTiledServiceLayer GOOGLE_IMAGE_Layer = new GoogleMapsTiledServiceLayer(GoogleMapLayerTypes.IMAGE_GOOGLE_MAP); | 40 | GoogleMapsTiledServiceLayer GOOGLE_IMAGE_Layer = new GoogleMapsTiledServiceLayer(GoogleMapLayerTypes.IMAGE_GOOGLE_MAP); |
39 | mapView.addLayer(GOOGLE_VECTOR_Layer); | 41 | mapView.addLayer(GOOGLE_IMAGE_Layer); |
40 | // GoogleMapsTiledServiceLayer GOOGLE_ANNO_Layer = new GoogleMapsTiledServiceLayer(GoogleMapLayerTypes.ANNOTATION_GOOGLE_MAP); | 42 | // GoogleMapsTiledServiceLayer GOOGLE_ANNO_Layer = new GoogleMapsTiledServiceLayer(GoogleMapLayerTypes.ANNOTATION_GOOGLE_MAP); |
41 | // mapView.addLayer(GOOGLE_ANNO_Layer); | 43 | // mapView.addLayer(GOOGLE_ANNO_Layer); |
42 | 44 | ... | ... |
1 | package com.pashanhoo.landsurvey; | 1 | package com.pashanhoo.landsurvey; |
2 | 2 | ||
3 | import android.annotation.SuppressLint; | ||
4 | import android.location.Location; | 3 | import android.location.Location; |
5 | import android.location.LocationListener; | 4 | import android.location.LocationListener; |
6 | import android.os.Bundle; | 5 | import android.os.Bundle; |
... | @@ -30,7 +29,7 @@ import com.esri.core.symbol.PictureMarkerSymbol; | ... | @@ -30,7 +29,7 @@ import com.esri.core.symbol.PictureMarkerSymbol; |
30 | import com.pashanhoo.landsurvey.layers.tianditu.TDTTileinfo; | 29 | import com.pashanhoo.landsurvey.layers.tianditu.TDTTileinfo; |
31 | import com.pashanhoo.landsurvey.layers.tianditu.TianDiTuLocalTiledMapServiceLayer; | 30 | import com.pashanhoo.landsurvey.layers.tianditu.TianDiTuLocalTiledMapServiceLayer; |
32 | import com.pashanhoo.landsurvey.layers.tianditu.TianDiTuTiledMapServiceLayer; | 31 | import com.pashanhoo.landsurvey.layers.tianditu.TianDiTuTiledMapServiceLayer; |
33 | import com.pashanhoo.landsurvey.layers.tianditu.TianDiTuTiledMapServiceType; | 32 | import com.pashanhoo.landsurvey.layers.tianditu.TianDiTuLayerTypes; |
34 | import com.pashanhoo.landsurvey.search.POISuggestion; | 33 | import com.pashanhoo.landsurvey.search.POISuggestion; |
35 | import com.pashanhoo.landsurvey.utils.AppInfo; | 34 | import com.pashanhoo.landsurvey.utils.AppInfo; |
36 | 35 | ||
... | @@ -129,7 +128,7 @@ public class MainActivity extends AppCompatActivity { | ... | @@ -129,7 +128,7 @@ public class MainActivity extends AppCompatActivity { |
129 | locationDisplayManager.stop(); | 128 | locationDisplayManager.stop(); |
130 | } else { | 129 | } else { |
131 | locationDisplayManager.start(); | 130 | locationDisplayManager.start(); |
132 | mapView.zoomToResolution(locationDisplayManager.getPoint(), TDTTileinfo.getRes4490()[18]); | 131 | mapView.zoomToResolution(locationDisplayManager.getPoint(), t_vec.getRes()[18]); |
133 | } | 132 | } |
134 | } | 133 | } |
135 | }); | 134 | }); |
... | @@ -154,18 +153,18 @@ public class MainActivity extends AppCompatActivity { | ... | @@ -154,18 +153,18 @@ public class MainActivity extends AppCompatActivity { |
154 | mapView.setEsriLogoVisible(false); | 153 | mapView.setEsriLogoVisible(false); |
155 | mapView.enableWrapAround(false); | 154 | mapView.enableWrapAround(false); |
156 | // 添加地图图层 | 155 | // 添加地图图层 |
157 | t_vec = new TianDiTuTiledMapServiceLayer(TianDiTuTiledMapServiceType.VEC_C); | 156 | t_vec = new TianDiTuTiledMapServiceLayer(TianDiTuLayerTypes.VEC_C); |
158 | mapView.addLayer(t_vec); | 157 | mapView.addLayer(t_vec); |
159 | t_cva = new TianDiTuTiledMapServiceLayer(TianDiTuTiledMapServiceType.CVA_C); | 158 | t_cva = new TianDiTuTiledMapServiceLayer(TianDiTuLayerTypes.CVA_C); |
160 | mapView.addLayer(t_cva); | 159 | mapView.addLayer(t_cva); |
161 | // 一个本地sqlite数据库,注意其只有8-9级数据,因此在数据层中予以了显示控制 | 160 | // 一个本地sqlite数据库,注意其只有8-9级数据,因此在数据层中予以了显示控制 |
162 | t_local = new TianDiTuLocalTiledMapServiceLayer("my.db", "IMG_C"); | 161 | t_local = new TianDiTuLocalTiledMapServiceLayer("my.db", "IMG_C"); |
163 | mapView.addLayer(t_local); | 162 | mapView.addLayer(t_local); |
164 | // 添加地图图层 | 163 | // 添加地图图层 |
165 | t_img = new TianDiTuTiledMapServiceLayer(TianDiTuTiledMapServiceType.IMG_C); | 164 | t_img = new TianDiTuTiledMapServiceLayer(TianDiTuLayerTypes.IMG_C); |
166 | t_img.setVisible(false); | 165 | t_img.setVisible(false); |
167 | mapView.addLayer(t_img); | 166 | mapView.addLayer(t_img); |
168 | t_cia = new TianDiTuTiledMapServiceLayer(TianDiTuTiledMapServiceType.CIA_C); | 167 | t_cia = new TianDiTuTiledMapServiceLayer(TianDiTuLayerTypes.CIA_C); |
169 | t_cia.setVisible(false); | 168 | t_cia.setVisible(false); |
170 | mapView.addLayer(t_cia); | 169 | mapView.addLayer(t_cia); |
171 | mapType = "VEC"; | 170 | mapType = "VEC"; |
... | @@ -173,8 +172,8 @@ public class MainActivity extends AppCompatActivity { | ... | @@ -173,8 +172,8 @@ public class MainActivity extends AppCompatActivity { |
173 | graphicsLayer = new GraphicsLayer(); | 172 | graphicsLayer = new GraphicsLayer(); |
174 | mapView.addLayer(graphicsLayer); | 173 | mapView.addLayer(graphicsLayer); |
175 | // 设置地图的最小和最大分辨率 | 174 | // 设置地图的最小和最大分辨率 |
176 | mapView.setMaxResolution(TDTTileinfo.getRes4490()[1]); | 175 | mapView.setMaxResolution(t_vec.getRes()[1]); |
177 | mapView.setMinResolution(TDTTileinfo.getRes4490()[19]); | 176 | mapView.setMinResolution(t_vec.getRes()[19]); |
178 | // 监听地图状态变化事件 | 177 | // 监听地图状态变化事件 |
179 | mapView.setOnStatusChangedListener(new OnStatusChangedListener() { | 178 | mapView.setOnStatusChangedListener(new OnStatusChangedListener() { |
180 | private static final long serialVersionUID = 1L; | 179 | private static final long serialVersionUID = 1L; |
... | @@ -215,7 +214,7 @@ public class MainActivity extends AppCompatActivity { | ... | @@ -215,7 +214,7 @@ public class MainActivity extends AppCompatActivity { |
215 | locationDisplayManager.setLocationListener(new LocationListener() { | 214 | locationDisplayManager.setLocationListener(new LocationListener() { |
216 | @Override | 215 | @Override |
217 | public void onLocationChanged(Location location) { | 216 | public void onLocationChanged(Location location) { |
218 | mapView.zoomToResolution(new Point(location.getLongitude(), location.getLatitude()), TDTTileinfo.getRes4490()[18]); | 217 | mapView.zoomToResolution(new Point(location.getLongitude(), location.getLatitude()), t_vec.getRes()[18]); |
219 | mapinfoView.setText("当前地图级别为:18"); | 218 | mapinfoView.setText("当前地图级别为:18"); |
220 | } | 219 | } |
221 | 220 | ||
... | @@ -240,7 +239,7 @@ public class MainActivity extends AppCompatActivity { | ... | @@ -240,7 +239,7 @@ public class MainActivity extends AppCompatActivity { |
240 | 239 | ||
241 | POISuggestion colorSuggestion = (POISuggestion) searchSuggestion; | 240 | POISuggestion colorSuggestion = (POISuggestion) searchSuggestion; |
242 | Point poipt = new Point(colorSuggestion.getLng(), colorSuggestion.getLat()); | 241 | Point poipt = new Point(colorSuggestion.getLng(), colorSuggestion.getLat()); |
243 | mapView.zoomToResolution(poipt, TDTTileinfo.getRes4490()[19]); | 242 | mapView.zoomToResolution(poipt, t_vec.getRes()[19]); |
244 | graphicsLayer.addGraphic(new Graphic(poipt, | 243 | graphicsLayer.addGraphic(new Graphic(poipt, |
245 | new PictureMarkerSymbol(getResources().getDrawable(R.mipmap.locator)).setOffsetY(16))); | 244 | new PictureMarkerSymbol(getResources().getDrawable(R.mipmap.locator)).setOffsetY(16))); |
246 | // floatingSearchView.clearSuggestions(); | 245 | // floatingSearchView.clearSuggestions(); | ... | ... |
1 | package com.pashanhoo.landsurvey.layers.google; | 1 | package com.pashanhoo.landsurvey.layers.google; |
2 | 2 | ||
3 | import com.pashanhoo.landsurvey.layers.BaseTiledMapServiceType; | ||
4 | |||
3 | /** | 5 | /** |
4 | * Created by jiangbotao on 2018/3/28. | 6 | * Created by jiangbotao on 2018/3/28. |
5 | */ | 7 | */ |
6 | 8 | ||
7 | public interface GoogleMapLayerTypes { | 9 | public enum GoogleMapLayerTypes implements BaseTiledMapServiceType { |
8 | 10 | ||
9 | /** * Google vector map service by city map*/ | 11 | /** * Google vector map service by city map*/ |
10 | final int VECTOR_GOOGLE_MAP = 1; | 12 | VECTOR_GOOGLE_MAP, |
11 | /** * Google image map service by satellite map */ | 13 | /** * Google image map service by satellite map */ |
12 | final int IMAGE_GOOGLE_MAP = 2; | 14 | IMAGE_GOOGLE_MAP, |
13 | /** * Google topographic map service ======= topographic map */ | 15 | /** * Google topographic map service ======= topographic map */ |
14 | final int TERRAIN_GOOGLE_MAP = 3; | 16 | TERRAIN_GOOGLE_MAP, |
15 | /** * Google road POI map service = = = = net road map */ | 17 | /** * Google road POI map service = = = = net road map */ |
16 | final int ANNOTATION_GOOGLE_MAP = 4; | 18 | ANNOTATION_GOOGLE_MAP; |
19 | |||
20 | @Override | ||
21 | public String getName() | ||
22 | { | ||
23 | return this.name().toString(); | ||
24 | } | ||
17 | } | 25 | } | ... | ... |
1 | package com.pashanhoo.landsurvey.layers.google; | 1 | package com.pashanhoo.landsurvey.layers.google; |
2 | 2 | ||
3 | import com.esri.android.map.TiledServiceLayer; | ||
4 | |||
5 | import java.util.concurrent.RejectedExecutionException; | 3 | import java.util.concurrent.RejectedExecutionException; |
6 | 4 | ||
7 | import android.annotation.SuppressLint; | 5 | import android.annotation.SuppressLint; |
6 | import android.content.ContentValues; | ||
7 | import android.database.Cursor; | ||
8 | import android.util.Log; | 8 | import android.util.Log; |
9 | 9 | ||
10 | import com.esri.android.map.TiledServiceLayer; | ||
10 | import com.esri.android.map.event.OnStatusChangedListener; | 11 | import com.esri.android.map.event.OnStatusChangedListener; |
11 | import com.esri.core.geometry.Envelope; | 12 | import com.esri.core.geometry.Envelope; |
12 | import com.esri.core.geometry.Point; | 13 | import com.esri.core.geometry.Point; |
... | @@ -14,6 +15,8 @@ import com.esri.core.geometry.SpatialReference; | ... | @@ -14,6 +15,8 @@ import com.esri.core.geometry.SpatialReference; |
14 | import com.esri.core.internal.io.handler.ResponseListener; | 15 | import com.esri.core.internal.io.handler.ResponseListener; |
15 | import com.esri.core.internal.io.handler.a; | 16 | import com.esri.core.internal.io.handler.a; |
16 | import com.esri.core.io.UserCredentials; | 17 | import com.esri.core.io.UserCredentials; |
18 | import com.pashanhoo.landsurvey.utils.AppInfo; | ||
19 | import com.pashanhoo.landsurvey.utils.GADBHelper; | ||
17 | import com.pashanhoo.landsurvey.utils.GISHelper; | 20 | import com.pashanhoo.landsurvey.utils.GISHelper; |
18 | 21 | ||
19 | /** | 22 | /** |
... | @@ -28,27 +31,61 @@ public class GoogleMapsTiledServiceLayer extends TiledServiceLayer { | ... | @@ -28,27 +31,61 @@ public class GoogleMapsTiledServiceLayer extends TiledServiceLayer { |
28 | 31 | ||
29 | private static final double XMin = 110.35992000000005; | 32 | private static final double XMin = 110.35992000000005; |
30 | private static final double YMin = 31.382360000000062; | 33 | private static final double YMin = 31.382360000000062; |
31 | |||
32 | private static final double XMax = 116.65036000000009; | 34 | private static final double XMax = 116.65036000000009; |
33 | private static final double YMax = 36.36647000000005; | 35 | private static final double YMax = 36.36647000000005; |
34 | 36 | ||
35 | private static final double[] res = {156543.03392800014, 78271.516963999937, 39135.758482000092, 19567.879240999919, 9783.9396204999593, 4891.9698102499797, 2445.9849051249898, | 37 | private static final double[] res = {156543.03392800014, |
36 | 1222.9924525624949, 611.49622628138, 305.748113140558, 152.874056570411, 76.4370282850732, 38.2185141425366, 19.1092570712683, 9.55462853563415, 4.7773142679493699, 2.3886571339746849, | 38 | 78271.516963999937, |
37 | 1.1943285668550503 , 0.59716428355981721, 0.29858214164761665 }; | 39 | 39135.758482000092, |
38 | 40 | 19567.879240999919, | |
39 | private static final double[] scale = {591657527.591555, 295828763.79577702, 147914381.89788899, 73957190.948944002, 36978595.474472001, 18489297.737236001, 9244648.8686180003, | 41 | 9783.9396204999593, |
40 | 4622324.4343090001, 2311162.217155, 1155581.108577, 577790.554289, 288895.277144, 144447.638572, 72223.819286, 6111.909643, 18055.954822, 9027.9774109999998, 4513.9887049999998 | 42 | 4891.9698102499797, |
41 | ,2256.994353, 1128.4971760000001 }; | 43 | 2445.9849051249898, |
44 | 1222.9924525624949, | ||
45 | 611.49622628138, | ||
46 | 305.748113140558, | ||
47 | 152.874056570411, | ||
48 | 76.4370282850732, | ||
49 | 38.2185141425366, | ||
50 | 19.1092570712683, | ||
51 | 9.55462853563415, | ||
52 | 4.7773142679493699, | ||
53 | 2.3886571339746849, | ||
54 | 1.1943285668550503, | ||
55 | 0.59716428355981721, | ||
56 | 0.29858214164761665}; | ||
57 | |||
58 | private static final double[] scale = {591657527.591555, | ||
59 | 295828763.79577702, | ||
60 | 147914381.89788899, | ||
61 | 73957190.948944002, | ||
62 | 36978595.474472001, | ||
63 | 18489297.737236001, | ||
64 | 9244648.8686180003, | ||
65 | 4622324.4343090001, | ||
66 | 2311162.217155, | ||
67 | 1155581.108577, | ||
68 | 577790.554289, | ||
69 | 288895.277144, | ||
70 | 144447.638572, | ||
71 | 72223.819286, 6111.909643, | ||
72 | 18055.954822, | ||
73 | 9027.9774109999998, | ||
74 | 4513.9887049999998 | ||
75 | , 2256.994353, | ||
76 | 1128.4971760000001}; | ||
42 | 77 | ||
43 | private static String URL = "http://maps.iwxlh.com"; | 78 | private static String URL = "http://maps.iwxlh.com"; |
44 | private ResponseListener responseListener; | 79 | private ResponseListener responseListener; |
45 | private static Point origin = new Point(-20037508.342787, 20037508.342787); | 80 | private static Point origin = new Point(-20037508.342787, 20037508.342787); |
46 | 81 | ||
47 | private int GoogleMapLayerType; | 82 | private GoogleMapLayerTypes googleMapLayerType; |
48 | 83 | ||
49 | public GoogleMapsTiledServiceLayer(int layerType) { | 84 | public GoogleMapsTiledServiceLayer(GoogleMapLayerTypes layerType) { |
50 | this(true); | 85 | this(true); |
51 | this.GoogleMapLayerType = layerType; | 86 | this.googleMapLayerType = layerType; |
87 | // 新建数据表,主要在Activity中必须有AppInfo.Settings()初始数据库 | ||
88 | GADBHelper.createTable(AppInfo.mapcachedb, this.googleMapLayerType.getName()); | ||
52 | } | 89 | } |
53 | 90 | ||
54 | public GoogleMapsTiledServiceLayer(boolean initLayer) { | 91 | public GoogleMapsTiledServiceLayer(boolean initLayer) { |
... | @@ -77,22 +114,15 @@ public class GoogleMapsTiledServiceLayer extends TiledServiceLayer { | ... | @@ -77,22 +114,15 @@ public class GoogleMapsTiledServiceLayer extends TiledServiceLayer { |
77 | this.nativeHandle = create(); | 114 | this.nativeHandle = create(); |
78 | } | 115 | } |
79 | if (getID() == 0L) { | 116 | if (getID() == 0L) { |
80 | changeStatus(OnStatusChangedListener.STATUS.fromInt(-1000)); | 117 | this.changeStatus(OnStatusChangedListener.STATUS.fromInt(-1000)); |
81 | } else { | 118 | } else { |
82 | try { | 119 | try { |
83 | setDefaultSpatialReference(SpatialReference.create(102100)); | 120 | this.setDefaultSpatialReference(SpatialReference.create(102100)); |
84 | 121 | this.setFullExtent(new Envelope(xmin, ymin, xmax, ymax)); | |
85 | GISHelper.lonLat2Mercator(new Point(XMin, YMin)); | 122 | this.setTileInfo(new TiledServiceLayer.TileInfo(origin, scale, res, scale.length, 96, 256, 256)); |
86 | GISHelper.lonLat2Mercator(new Point(XMax, YMax)); | ||
87 | |||
88 | setFullExtent(new Envelope(xmin, ymin, xmax, ymax)); | ||
89 | // setFullExtent(new Envelope(minMercatorPoint.getX(), | ||
90 | // minMercatorPoint.getY(), maxMercatorPoint.getX(), | ||
91 | // maxMercatorPoint.getY())); | ||
92 | setTileInfo(new TiledServiceLayer.TileInfo(origin, scale, res, scale.length, 96, 256, 256)); | ||
93 | super.initLayer(); | 123 | super.initLayer(); |
94 | } catch (Exception localException) { | 124 | } catch (Exception localException) { |
95 | changeStatus(OnStatusChangedListener.STATUS.fromInt(-1005)); | 125 | this.changeStatus(OnStatusChangedListener.STATUS.fromInt(-1005)); |
96 | Log.e("ArcGIS", "Bing map url =" + getUrl(), localException); | 126 | Log.e("ArcGIS", "Bing map url =" + getUrl(), localException); |
97 | } | 127 | } |
98 | } | 128 | } |
... | @@ -100,25 +130,40 @@ public class GoogleMapsTiledServiceLayer extends TiledServiceLayer { | ... | @@ -100,25 +130,40 @@ public class GoogleMapsTiledServiceLayer extends TiledServiceLayer { |
100 | 130 | ||
101 | @SuppressLint("DefaultLocale") | 131 | @SuppressLint("DefaultLocale") |
102 | protected byte[] getTile(int level, int col, int row) throws Exception { | 132 | protected byte[] getTile(int level, int col, int row) throws Exception { |
133 | byte[] result = null; | ||
134 | |||
103 | String url = ""; | 135 | String url = ""; |
104 | String s = "Galil"; | 136 | String s = "Galil"; |
105 | 137 | switch (googleMapLayerType) { | |
106 | switch (GoogleMapLayerType) { | 138 | case IMAGE_GOOGLE_MAP: |
107 | case GoogleMapLayerTypes.IMAGE_GOOGLE_MAP: | ||
108 | url = "http://mt" + (col % 4) + ".google.cn/vt/lyrs=s&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&" + "s=" + s; | 139 | url = "http://mt" + (col % 4) + ".google.cn/vt/lyrs=s&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&" + "s=" + s; |
109 | break; | 140 | break; |
110 | case GoogleMapLayerTypes.VECTOR_GOOGLE_MAP: | 141 | case VECTOR_GOOGLE_MAP: |
111 | url = "http://mt" + (col % 4) + ".google.cn/vt/lyrs=m@161000000&v=w2.114&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&" + "s=" + s; | 142 | url = "http://mt" + (col % 4) + ".google.cn/vt/lyrs=m@161000000&v=w2.114&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&" + "s=" + s; |
112 | break; | 143 | break; |
113 | case GoogleMapLayerTypes.TERRAIN_GOOGLE_MAP: | 144 | case TERRAIN_GOOGLE_MAP: |
114 | url = "http://mt" + (col % 4) + ".google.cn/vt/lyrs=t@131,r@227000000&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&" + "s=" + s; | 145 | url = "http://mt" + (col % 4) + ".google.cn/vt/lyrs=t@131,r@227000000&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&" + "s=" + s; |
115 | break; | 146 | break; |
116 | case GoogleMapLayerTypes.ANNOTATION_GOOGLE_MAP: | 147 | case ANNOTATION_GOOGLE_MAP: |
117 | // url = "http://mt2.google.cn/vt/lyrs=m@161000000&v=w2.114&hl=zh-CN&gl=CN&src=app&x=" + col + "&y=" + row + "&z=" + level + "&s=" + s; | 148 | // url = "http://mt2.google.cn/vt/lyrs=m@161000000&v=w2.114&hl=zh-CN&gl=CN&src=app&x=" + col + "&y=" + row + "&z=" + level + "&s=" + s; |
118 | url = "http://webst02.is.autonavi.com/appmaptile?style=8&x="+ col +"&y="+ row +"&z="+level; | 149 | url = "http://webst02.is.autonavi.com/appmaptile?style=8&x=" + col + "&y=" + row + "&z=" + level; |
119 | break; | 150 | break; |
120 | } | 151 | } |
121 | return a.a(url, null, null, this.responseListener); | 152 | |
153 | try { | ||
154 | // 首先从离线数据库中读取 | ||
155 | result = getOfflineCacheDB(level, col, row); | ||
156 | // 如果没有就直接从web上读取 | ||
157 | if (result == null) { | ||
158 | result = a.a(url, null, null, this.responseListener); | ||
159 | // 将读取的数据存入mbtiles中 | ||
160 | AddOfflineCacheDB(level, col, row, result); | ||
161 | } | ||
162 | } catch (Exception ex) { | ||
163 | ex.printStackTrace(); | ||
164 | } | ||
165 | |||
166 | return result; | ||
122 | } | 167 | } |
123 | 168 | ||
124 | public void refresh() { | 169 | public void refresh() { |
... | @@ -145,4 +190,38 @@ public class GoogleMapsTiledServiceLayer extends TiledServiceLayer { | ... | @@ -145,4 +190,38 @@ public class GoogleMapsTiledServiceLayer extends TiledServiceLayer { |
145 | public void reinitializeLayer(String appID) { | 190 | public void reinitializeLayer(String appID) { |
146 | super.reinitializeLayer(null); | 191 | super.reinitializeLayer(null); |
147 | } | 192 | } |
193 | |||
194 | private byte[] getOfflineCacheDB(int level, int col, int row) throws Exception { | ||
195 | |||
196 | byte[] result = null; | ||
197 | String sql = "select * from " + this.googleMapLayerType.getName() + " where TILELEVEL = " + level + " and TILECOL = " + col + " and TILEROW = " + row; | ||
198 | Cursor mCursor = AppInfo.mapcachedb.rawQuery(sql, null); | ||
199 | boolean hasData = false; | ||
200 | |||
201 | while (mCursor.moveToNext()) {//判断是否存在数据 | ||
202 | hasData = true; | ||
203 | } | ||
204 | if (hasData) {//数据库中有数据 | ||
205 | try { | ||
206 | if (mCursor.moveToFirst()) { | ||
207 | result = mCursor.getBlob(mCursor.getColumnIndex("TILEDATA")); | ||
208 | } | ||
209 | mCursor.close(); | ||
210 | } catch (Exception e) { | ||
211 | e.printStackTrace(); | ||
212 | result = null; | ||
213 | } | ||
214 | } | ||
215 | return result; | ||
216 | } | ||
217 | |||
218 | private void AddOfflineCacheDB(int level, int col, int row, byte[] bytes) { | ||
219 | ContentValues values = new ContentValues(); | ||
220 | values.put("TILELEVEL", level); | ||
221 | values.put("TILECOL", col); | ||
222 | values.put("TILEROW", row); | ||
223 | values.put("TILEDATA", bytes); | ||
224 | |||
225 | AppInfo.mapcachedb.insert(this.googleMapLayerType.getName(), null, values); | ||
226 | } | ||
148 | } | 227 | } | ... | ... |
1 | package com.pashanhoo.landsurvey.layers.tianditu; | ||
2 | |||
3 | import java.util.Random; | ||
4 | |||
5 | /** | ||
6 | * Created by jiangbotao on 2018/3/23. | ||
7 | */ | ||
8 | |||
9 | public class TDTUrl { | ||
10 | |||
11 | private TianDiTuTiledMapServiceType _tiandituMapServiceType; | ||
12 | private int _level; | ||
13 | private int _col; | ||
14 | private int _row; | ||
15 | |||
16 | public TDTUrl(int level, int col, int row, TianDiTuTiledMapServiceType tiandituMapServiceType) { | ||
17 | this._level = level; | ||
18 | this._col = col; | ||
19 | this._row = row; | ||
20 | this._tiandituMapServiceType = tiandituMapServiceType; | ||
21 | } | ||
22 | |||
23 | public String generatUrl() { | ||
24 | |||
25 | StringBuilder url = new StringBuilder("http://t"); | ||
26 | Random random = new Random(); | ||
27 | int subdomain = (random.nextInt(6) + 1); | ||
28 | url.append(subdomain); | ||
29 | switch (this._tiandituMapServiceType) { | ||
30 | case VEC_C: | ||
31 | url.append(".tianditu.com/DataServer?T=vec_c&X=").append(this._col).append("&Y=").append(this._row).append("&L=").append(this._level); | ||
32 | break; | ||
33 | case CVA_C: | ||
34 | url.append(".tianditu.com/DataServer?T=cva_c&X=").append(this._col).append("&Y=").append(this._row).append("&L=").append(this._level); | ||
35 | break; | ||
36 | case CIA_C: | ||
37 | url.append(".tianditu.com/DataServer?T=cia_c&X=").append(this._col).append("&Y=").append(this._row).append("&L=").append(this._level); | ||
38 | break; | ||
39 | case IMG_C: | ||
40 | url.append(".tianditu.com/DataServer?T=img_c&X=").append(this._col).append("&Y=").append(this._row).append("&L=").append(this._level); | ||
41 | break; | ||
42 | case VEC_W: | ||
43 | url.append(".tianditu.com/DataServer?T=vec_w&X=").append(this._col).append("&Y=").append(this._row).append("&L=").append(this._level); | ||
44 | break; | ||
45 | case CVA_W: | ||
46 | url.append(".tianditu.com/DataServer?T=cva_w&X=").append(this._col).append("&Y=").append(this._row).append("&L=").append(this._level); | ||
47 | break; | ||
48 | case CIA_W: | ||
49 | url.append(".tianditu.com/DataServer?T=cia_w&X=").append(this._col).append("&Y=").append(this._row).append("&L=").append(this._level); | ||
50 | break; | ||
51 | case IMG_W: | ||
52 | url.append(".tianditu.com/DataServer?T=img_w&X=").append(this._col).append("&Y=").append(this._row).append("&L=").append(this._level); | ||
53 | break; | ||
54 | default: | ||
55 | return null; | ||
56 | } | ||
57 | return url.toString(); | ||
58 | } | ||
59 | } |
... | @@ -6,7 +6,7 @@ import com.pashanhoo.landsurvey.layers.BaseTiledMapServiceType; | ... | @@ -6,7 +6,7 @@ import com.pashanhoo.landsurvey.layers.BaseTiledMapServiceType; |
6 | * Created by jiangbotao on 2018/3/23. | 6 | * Created by jiangbotao on 2018/3/23. |
7 | */ | 7 | */ |
8 | 8 | ||
9 | public enum TianDiTuTiledMapServiceType implements BaseTiledMapServiceType { | 9 | public enum TianDiTuLayerTypes implements BaseTiledMapServiceType { |
10 | 10 | ||
11 | /** | 11 | /** |
12 | * 矢量数据,CGCS2000 | 12 | * 矢量数据,CGCS2000 | ... | ... |
... | @@ -8,6 +8,8 @@ import com.esri.android.map.TiledServiceLayer; | ... | @@ -8,6 +8,8 @@ import com.esri.android.map.TiledServiceLayer; |
8 | import com.esri.core.geometry.Envelope; | 8 | import com.esri.core.geometry.Envelope; |
9 | import com.esri.core.geometry.Point; | 9 | import com.esri.core.geometry.Point; |
10 | import com.esri.core.geometry.SpatialReference; | 10 | import com.esri.core.geometry.SpatialReference; |
11 | import com.esri.core.internal.io.handler.ResponseListener; | ||
12 | import com.esri.core.internal.io.handler.a; | ||
11 | import com.esri.core.io.UserCredentials; | 13 | import com.esri.core.io.UserCredentials; |
12 | import com.pashanhoo.landsurvey.utils.AppInfo; | 14 | import com.pashanhoo.landsurvey.utils.AppInfo; |
13 | import com.pashanhoo.landsurvey.utils.GADBHelper; | 15 | import com.pashanhoo.landsurvey.utils.GADBHelper; |
... | @@ -16,6 +18,7 @@ import java.io.BufferedInputStream; | ... | @@ -16,6 +18,7 @@ import java.io.BufferedInputStream; |
16 | import java.io.ByteArrayOutputStream; | 18 | import java.io.ByteArrayOutputStream; |
17 | import java.net.HttpURLConnection; | 19 | import java.net.HttpURLConnection; |
18 | import java.net.URL; | 20 | import java.net.URL; |
21 | import java.util.Random; | ||
19 | import java.util.concurrent.RejectedExecutionException; | 22 | import java.util.concurrent.RejectedExecutionException; |
20 | 23 | ||
21 | /** | 24 | /** |
... | @@ -24,23 +27,78 @@ import java.util.concurrent.RejectedExecutionException; | ... | @@ -24,23 +27,78 @@ import java.util.concurrent.RejectedExecutionException; |
24 | 27 | ||
25 | public class TianDiTuTiledMapServiceLayer extends TiledServiceLayer { | 28 | public class TianDiTuTiledMapServiceLayer extends TiledServiceLayer { |
26 | 29 | ||
27 | private TianDiTuTiledMapServiceType _mapType; | 30 | private static final Point originalPoint = new Point(-180, 90); |
31 | |||
32 | private static final double[] res = { | ||
33 | 1.40625, | ||
34 | 0.703125, | ||
35 | 0.3515625, | ||
36 | 0.17578125, | ||
37 | 0.087890625, | ||
38 | 0.0439453125, | ||
39 | 0.02197265625, | ||
40 | 0.010986328125, | ||
41 | 0.0054931640625, | ||
42 | 0.00274658203125, | ||
43 | 0.001373291015625, | ||
44 | 0.0006866455078125, | ||
45 | 0.00034332275390625, | ||
46 | 0.000171661376953125, | ||
47 | 8.58306884765629E-05, | ||
48 | 4.29153442382814E-05, | ||
49 | 2.14576721191407E-05, | ||
50 | 1.07288360595703E-05, | ||
51 | 5.36441802978515E-06, | ||
52 | 2.68220901489258E-06, | ||
53 | 1.34110450744629E-06 | ||
54 | }; | ||
55 | private static final double[] scale = { | ||
56 | 400000000, | ||
57 | 295497598.5708346, | ||
58 | 147748799.285417, | ||
59 | 73874399.6427087, | ||
60 | 36937199.8213544, | ||
61 | 18468599.9106772, | ||
62 | 9234299.95533859, | ||
63 | 4617149.97766929, | ||
64 | 2308574.98883465, | ||
65 | 1154287.49441732, | ||
66 | 577143.747208662, | ||
67 | 288571.873604331, | ||
68 | 144285.936802165, | ||
69 | 72142.9684010827, | ||
70 | 36071.4842005414, | ||
71 | 18035.7421002707, | ||
72 | 9017.87105013534, | ||
73 | 4508.93552506767, | ||
74 | 2254.467762533835, | ||
75 | 1127.2338812669175, | ||
76 | 563.616940 | ||
77 | }; | ||
78 | private static final int levels = 21; | ||
79 | private static final int dpi = 96; | ||
80 | private static final int tileWidth = 256; | ||
81 | private static final int tileHeight = 256; | ||
82 | |||
83 | private ResponseListener responseListener; | ||
84 | |||
85 | private TianDiTuLayerTypes _mapType; | ||
28 | private TileInfo tiandituTileInfo; | 86 | private TileInfo tiandituTileInfo; |
29 | 87 | ||
30 | public TianDiTuTiledMapServiceLayer() { | 88 | public TianDiTuTiledMapServiceLayer() { |
31 | this(null, null, true); | 89 | this(null, null, true); |
32 | } | 90 | } |
33 | 91 | ||
34 | public TianDiTuTiledMapServiceLayer(TianDiTuTiledMapServiceType mapType) { | 92 | public TianDiTuTiledMapServiceLayer(TianDiTuLayerTypes mapType) { |
35 | this(mapType, null, true); | 93 | this(mapType, null, true); |
36 | GADBHelper.createTable(AppInfo.mapcachedb, _mapType.getName()); | 94 | GADBHelper.createTable(AppInfo.mapcachedb, _mapType.getName()); |
37 | } | 95 | } |
38 | 96 | ||
39 | public TianDiTuTiledMapServiceLayer(TianDiTuTiledMapServiceType mapType, UserCredentials usercredentials) { | 97 | public TianDiTuTiledMapServiceLayer(TianDiTuLayerTypes mapType, UserCredentials usercredentials) { |
40 | this(mapType, usercredentials, true); | 98 | this(mapType, usercredentials, true); |
41 | } | 99 | } |
42 | 100 | ||
43 | public TianDiTuTiledMapServiceLayer(TianDiTuTiledMapServiceType mapType, UserCredentials usercredentials, boolean flag) { | 101 | public TianDiTuTiledMapServiceLayer(TianDiTuLayerTypes mapType, UserCredentials usercredentials, boolean flag) { |
44 | super(""); | 102 | super(""); |
45 | this._mapType = mapType; | 103 | this._mapType = mapType; |
46 | setCredentials(usercredentials); | 104 | setCredentials(usercredentials); |
... | @@ -54,6 +112,7 @@ public class TianDiTuTiledMapServiceLayer extends TiledServiceLayer { | ... | @@ -54,6 +112,7 @@ public class TianDiTuTiledMapServiceLayer extends TiledServiceLayer { |
54 | } | 112 | } |
55 | 113 | ||
56 | final TianDiTuTiledMapServiceLayer a; | 114 | final TianDiTuTiledMapServiceLayer a; |
115 | |||
57 | { | 116 | { |
58 | a = TianDiTuTiledMapServiceLayer.this; | 117 | a = TianDiTuTiledMapServiceLayer.this; |
59 | //super(); | 118 | //super(); |
... | @@ -64,13 +123,17 @@ public class TianDiTuTiledMapServiceLayer extends TiledServiceLayer { | ... | @@ -64,13 +123,17 @@ public class TianDiTuTiledMapServiceLayer extends TiledServiceLayer { |
64 | } | 123 | } |
65 | } | 124 | } |
66 | 125 | ||
126 | public static double[] getRes() { | ||
127 | return res; | ||
128 | } | ||
67 | 129 | ||
68 | public TianDiTuTiledMapServiceType getMapType() { | 130 | public TianDiTuLayerTypes getMapType() { |
69 | return this._mapType; | 131 | return this._mapType; |
70 | } | 132 | } |
71 | 133 | ||
72 | protected void initLayer() { | 134 | protected void initLayer() { |
73 | this.buildTileInfo(); | 135 | this.tiandituTileInfo = new com.esri.android.map.TiledServiceLayer.TileInfo(originalPoint, scale, res, levels, dpi, tileWidth, tileHeight); |
136 | this.setTileInfo(this.tiandituTileInfo); | ||
74 | this.setFullExtent(new Envelope(-180, -90, 180, 90)); | 137 | this.setFullExtent(new Envelope(-180, -90, 180, 90)); |
75 | this.setDefaultSpatialReference(SpatialReference.create(4490)); //CGCS2000 | 138 | this.setDefaultSpatialReference(SpatialReference.create(4490)); //CGCS2000 |
76 | //this.setDefaultSpatialReference(SpatialReference.create(4326)); | 139 | //this.setDefaultSpatialReference(SpatialReference.create(4326)); |
... | @@ -114,35 +177,34 @@ public class TianDiTuTiledMapServiceLayer extends TiledServiceLayer { | ... | @@ -114,35 +177,34 @@ public class TianDiTuTiledMapServiceLayer extends TiledServiceLayer { |
114 | @Override | 177 | @Override |
115 | protected byte[] getTile(int level, int col, int row) throws Exception { | 178 | protected byte[] getTile(int level, int col, int row) throws Exception { |
116 | byte[] result = null; | 179 | byte[] result = null; |
180 | |||
181 | StringBuilder url = new StringBuilder("http://t"); | ||
182 | Random random = new Random(); | ||
183 | int subdomain = (random.nextInt(6) + 1); | ||
184 | url.append(subdomain); | ||
185 | switch (this._mapType) { | ||
186 | case VEC_C: | ||
187 | url.append(".tianditu.com/DataServer?T=vec_c&X=").append(col).append("&Y=").append(row).append("&L=").append(level); | ||
188 | break; | ||
189 | case CVA_C: | ||
190 | url.append(".tianditu.com/DataServer?T=cva_c&X=").append(col).append("&Y=").append(row).append("&L=").append(level); | ||
191 | break; | ||
192 | case CIA_C: | ||
193 | url.append(".tianditu.com/DataServer?T=cia_c&X=").append(col).append("&Y=").append(row).append("&L=").append(level); | ||
194 | break; | ||
195 | case IMG_C: | ||
196 | url.append(".tianditu.com/DataServer?T=img_c&X=").append(col).append("&Y=").append(row).append("&L=").append(level); | ||
197 | break; | ||
198 | default: | ||
199 | return null; | ||
200 | } | ||
201 | |||
117 | try { | 202 | try { |
118 | // 首先从离线数据库中读取 | 203 | // 首先从离线数据库中读取 |
119 | result = getOfflineCacheDB(level, col, row); | 204 | result = getOfflineCacheDB(level, col, row); |
120 | // 如果没有就直接从web上读取 | 205 | // 如果没有就直接从web上读取 |
121 | if (result == null) { | 206 | if (result == null) { |
122 | ByteArrayOutputStream bos = new ByteArrayOutputStream(); | 207 | result = com.esri.core.internal.io.handler.a.a(url.toString(), null, null, this.responseListener); |
123 | |||
124 | URL sjwurl = new URL(this.getTianDiMapUrl(level, col, row)); | ||
125 | HttpURLConnection httpUrl = null; | ||
126 | BufferedInputStream bis = null; | ||
127 | byte[] buf = new byte[1024]; | ||
128 | |||
129 | httpUrl = (HttpURLConnection) sjwurl.openConnection(); | ||
130 | httpUrl.connect(); | ||
131 | bis = new BufferedInputStream(httpUrl.getInputStream()); | ||
132 | |||
133 | while (true) { | ||
134 | int bytes_read = bis.read(buf); | ||
135 | if (bytes_read > 0) { | ||
136 | bos.write(buf, 0, bytes_read); | ||
137 | } else { | ||
138 | break; | ||
139 | } | ||
140 | } | ||
141 | ; | ||
142 | bis.close(); | ||
143 | httpUrl.disconnect(); | ||
144 | |||
145 | result = bos.toByteArray(); | ||
146 | // 将读取的数据存入mbtiles中 | 208 | // 将读取的数据存入mbtiles中 |
147 | AddOfflineCacheDB(level, col, row, result); | 209 | AddOfflineCacheDB(level, col, row, result); |
148 | } | 210 | } |
... | @@ -153,7 +215,7 @@ public class TianDiTuTiledMapServiceLayer extends TiledServiceLayer { | ... | @@ -153,7 +215,7 @@ public class TianDiTuTiledMapServiceLayer extends TiledServiceLayer { |
153 | return result; | 215 | return result; |
154 | } | 216 | } |
155 | 217 | ||
156 | private void AddOfflineCacheDB(int level, int col, int row, byte[] bytes){ | 218 | private void AddOfflineCacheDB(int level, int col, int row, byte[] bytes) { |
157 | ContentValues values = new ContentValues(); | 219 | ContentValues values = new ContentValues(); |
158 | values.put("TILELEVEL", level); | 220 | values.put("TILELEVEL", level); |
159 | values.put("TILECOL", col); | 221 | values.put("TILECOL", col); |
... | @@ -193,68 +255,5 @@ public class TianDiTuTiledMapServiceLayer extends TiledServiceLayer { | ... | @@ -193,68 +255,5 @@ public class TianDiTuTiledMapServiceLayer extends TiledServiceLayer { |
193 | return this.tiandituTileInfo; | 255 | return this.tiandituTileInfo; |
194 | } | 256 | } |
195 | 257 | ||
196 | /** | ||
197 | * | ||
198 | * */ | ||
199 | private String getTianDiMapUrl(int level, int col, int row) { | ||
200 | String url = new TDTUrl(level, col, row, this._mapType).generatUrl(); | ||
201 | return url; | ||
202 | } | ||
203 | 258 | ||
204 | private void buildTileInfo() { | ||
205 | Point originalPoint = new Point(-180, 90); | ||
206 | |||
207 | double[] res = { | ||
208 | 1.40625, | ||
209 | 0.703125, | ||
210 | 0.3515625, | ||
211 | 0.17578125, | ||
212 | 0.087890625, | ||
213 | 0.0439453125, | ||
214 | 0.02197265625, | ||
215 | 0.010986328125, | ||
216 | 0.0054931640625, | ||
217 | 0.00274658203125, | ||
218 | 0.001373291015625, | ||
219 | 0.0006866455078125, | ||
220 | 0.00034332275390625, | ||
221 | 0.000171661376953125, | ||
222 | 8.58306884765629E-05, | ||
223 | 4.29153442382814E-05, | ||
224 | 2.14576721191407E-05, | ||
225 | 1.07288360595703E-05, | ||
226 | 5.36441802978515E-06, | ||
227 | 2.68220901489258E-06, | ||
228 | 1.34110450744629E-06 | ||
229 | }; | ||
230 | double[] scale = { | ||
231 | 400000000, | ||
232 | 295497598.5708346, | ||
233 | 147748799.285417, | ||
234 | 73874399.6427087, | ||
235 | 36937199.8213544, | ||
236 | 18468599.9106772, | ||
237 | 9234299.95533859, | ||
238 | 4617149.97766929, | ||
239 | 2308574.98883465, | ||
240 | 1154287.49441732, | ||
241 | 577143.747208662, | ||
242 | 288571.873604331, | ||
243 | 144285.936802165, | ||
244 | 72142.9684010827, | ||
245 | 36071.4842005414, | ||
246 | 18035.7421002707, | ||
247 | 9017.87105013534, | ||
248 | 4508.93552506767, | ||
249 | 2254.467762533835, | ||
250 | 1127.2338812669175, | ||
251 | 563.616940 | ||
252 | }; | ||
253 | int levels = 21; | ||
254 | int dpi = 96; | ||
255 | int tileWidth = 256; | ||
256 | int tileHeight = 256; | ||
257 | this.tiandituTileInfo = new com.esri.android.map.TiledServiceLayer.TileInfo(originalPoint, scale, res, levels, dpi, tileWidth, tileHeight); | ||
258 | this.setTileInfo(this.tiandituTileInfo); | ||
259 | } | ||
260 | } | 259 | } | ... | ... |
... | @@ -21,8 +21,8 @@ public class AppInfo { | ... | @@ -21,8 +21,8 @@ public class AppInfo { |
21 | 21 | ||
22 | public static Point initPoint = new Point(121.56, 29.862149); | 22 | public static Point initPoint = new Point(121.56, 29.862149); |
23 | 23 | ||
24 | // public static double initRes = TDTTileinfo.getRes4490()[6]; | 24 | public static double initRes = TDTTileinfo.getRes4490()[6]; |
25 | public static double initRes = TDTTileinfo.getRes4326()[6]; | 25 | // public static double initRes = TDTTileinfo.getRes4326()[6]; |
26 | 26 | ||
27 | 27 | ||
28 | public static void Settings(){ | 28 | public static void Settings(){ | ... | ... |
... | @@ -55,8 +55,7 @@ public class GADBHelper extends SQLiteOpenHelper { | ... | @@ -55,8 +55,7 @@ public class GADBHelper extends SQLiteOpenHelper { |
55 | "(TILELEVEL INT," + | 55 | "(TILELEVEL INT," + |
56 | "TILECOL INT," + | 56 | "TILECOL INT," + |
57 | "TILEROW INT," + | 57 | "TILEROW INT," + |
58 | "TILEDATA BLOB," + | 58 | "TILEDATA BLOB)"); |
59 | "TILETIME TEXT)"); | ||
60 | 59 | ||
61 | db.setTransactionSuccessful(); | 60 | db.setTransactionSuccessful(); |
62 | db.endTransaction(); | 61 | db.endTransaction(); | ... | ... |
1 | package com.pashanhoo.landsurvey.utils; | ||
2 | |||
3 | import com.esri.core.geometry.Point; | ||
4 | |||
5 | /** | ||
6 | * Created by jiangbotao on 2018/3/28. | ||
7 | */ | ||
8 | |||
9 | public class JZLocationConverter { | ||
10 | |||
11 | private static final double LAT_OFFSET_0(double x, double y) { | ||
12 | return -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x)); | ||
13 | } | ||
14 | |||
15 | private static final double LAT_OFFSET_1(double x, double y) { | ||
16 | return (20.0 * Math.sin(6.0 * x * Math.PI) + 20.0 * Math.sin(2.0 * x * Math.PI)) * 2.0 / 3.0; | ||
17 | } | ||
18 | |||
19 | private static final double LAT_OFFSET_2(double x, double y) { | ||
20 | return (20.0 * Math.sin(y * Math.PI) + 40.0 * Math.sin(y / 3.0 * Math.PI)) * 2.0 / 3.0; | ||
21 | } | ||
22 | |||
23 | private static final double LAT_OFFSET_3(double x, double y) { | ||
24 | return (160.0 * Math.sin(y / 12.0 * Math.PI) + 320 * Math.sin(y * Math.PI / 30.0)) * 2.0 / 3.0; | ||
25 | } | ||
26 | |||
27 | private static final double LON_OFFSET_0(double x, double y) { | ||
28 | return 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x)); | ||
29 | } | ||
30 | |||
31 | private static final double LON_OFFSET_1(double x, double y) { | ||
32 | return (20.0 * Math.sin(6.0 * x * Math.PI) + 20.0 * Math.sin(2.0 * x * Math.PI)) * 2.0 / 3.0; | ||
33 | } | ||
34 | |||
35 | private static final double LON_OFFSET_2(double x, double y) { | ||
36 | return (20.0 * Math.sin(x * Math.PI) + 40.0 * Math.sin(x / 3.0 * Math.PI)) * 2.0 / 3.0; | ||
37 | } | ||
38 | |||
39 | private static final double LON_OFFSET_3(double x, double y) { | ||
40 | return (150.0 * Math.sin(x / 12.0 * Math.PI) + 300.0 * Math.sin(x / 30.0 * Math.PI)) * 2.0 / 3.0; | ||
41 | } | ||
42 | |||
43 | private static double RANGE_LON_MAX = 137.8347; | ||
44 | private static double RANGE_LON_MIN = 72.004; | ||
45 | private static double RANGE_LAT_MAX = 55.8271; | ||
46 | private static double RANGE_LAT_MIN = 0.8293; | ||
47 | |||
48 | private static double jzA = 6378245.0; | ||
49 | private static double jzEE = 0.00669342162296594323; | ||
50 | |||
51 | public static double transformLat(double x, double y) { | ||
52 | double ret = LAT_OFFSET_0(x, y); | ||
53 | ret += LAT_OFFSET_1(x, y); | ||
54 | ret += LAT_OFFSET_2(x, y); | ||
55 | ret += LAT_OFFSET_3(x, y); | ||
56 | return ret; | ||
57 | } | ||
58 | |||
59 | public static double transformLon(double x, double y) { | ||
60 | double ret = LON_OFFSET_0(x, y); | ||
61 | ret += LON_OFFSET_1(x, y); | ||
62 | ret += LON_OFFSET_2(x, y); | ||
63 | ret += LON_OFFSET_3(x, y); | ||
64 | return ret; | ||
65 | } | ||
66 | |||
67 | public static boolean outOfChina(double lat, double lon) { | ||
68 | if (lon < RANGE_LON_MIN || lon > RANGE_LON_MAX) | ||
69 | return true; | ||
70 | if (lat < RANGE_LAT_MIN || lat > RANGE_LAT_MAX) | ||
71 | return true; | ||
72 | return false; | ||
73 | } | ||
74 | |||
75 | public static Point gcj02Encrypt(double ggLat, double ggLon) { | ||
76 | Point resPoint = new Point(); | ||
77 | double mgLat; | ||
78 | double mgLon; | ||
79 | if (outOfChina(ggLat, ggLon)) { | ||
80 | resPoint.setY(ggLat); | ||
81 | resPoint.setX(ggLon); | ||
82 | return resPoint; | ||
83 | } | ||
84 | double dLat = transformLat(ggLon - 105.0, ggLat - 35.0); | ||
85 | double dLon = transformLon(ggLon - 105.0, ggLat - 35.0); | ||
86 | double radLat = ggLat / 180.0 * Math.PI; | ||
87 | double magic = Math.sin(radLat); | ||
88 | magic = 1 - jzEE * magic * magic; | ||
89 | double sqrtMagic = Math.sqrt(magic); | ||
90 | dLat = (dLat * 180.0) / ((jzA * (1 - jzEE)) / (magic * sqrtMagic) * Math.PI); | ||
91 | dLon = (dLon * 180.0) / (jzA / sqrtMagic * Math.cos(radLat) * Math.PI); | ||
92 | mgLat = ggLat + dLat; | ||
93 | mgLon = ggLon + dLon; | ||
94 | |||
95 | resPoint.setY(mgLat); | ||
96 | resPoint.setX(mgLon); | ||
97 | return resPoint; | ||
98 | } | ||
99 | |||
100 | public static Point gcj02Decrypt(double gjLat, double gjLon) { | ||
101 | Point gPt = gcj02Encrypt(gjLat, gjLon); | ||
102 | double dLon = gPt.getX() - gjLon; | ||
103 | double dLat = gPt.getY() - gjLat; | ||
104 | Point pt = new Point(); | ||
105 | pt.setY(gjLat - dLat); | ||
106 | pt.setX(gjLon - dLon); | ||
107 | return pt; | ||
108 | } | ||
109 | |||
110 | public static Point bd09Decrypt(double bdLat, double bdLon) { | ||
111 | Point gcjPt = new Point(); | ||
112 | double x = bdLon - 0.0065, y = bdLat - 0.006; | ||
113 | double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * Math.PI); | ||
114 | double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * Math.PI); | ||
115 | gcjPt.setX(z * Math.cos(theta)); | ||
116 | gcjPt.setY(z * Math.sin(theta)); | ||
117 | return gcjPt; | ||
118 | } | ||
119 | |||
120 | public static Point bd09Encrypt(double ggLat, double ggLon) { | ||
121 | Point bdPt = new Point(); | ||
122 | double x = ggLon, y = ggLat; | ||
123 | double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * Math.PI); | ||
124 | double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * Math.PI); | ||
125 | bdPt.setX(z * Math.cos(theta) + 0.0065); | ||
126 | bdPt.setY(z * Math.sin(theta) + 0.006); | ||
127 | return bdPt; | ||
128 | } | ||
129 | |||
130 | /** | ||
131 | * @param location 世界标准地理坐标(WGS-84) | ||
132 | * @return 中国国测局地理坐标(GCJ-02)<火星坐标> | ||
133 | * @brief 世界标准地理坐标(WGS-84) 转换成 中国国测局地理坐标(GCJ-02)<火星坐标> | ||
134 | * | ||
135 | * ####只在中国大陆的范围的坐标有效,以外直接返回世界标准坐标 | ||
136 | */ | ||
137 | public static Point wgs84ToGcj02(Point location) { | ||
138 | return gcj02Encrypt(location.getY(), location.getX()); | ||
139 | } | ||
140 | |||
141 | /** | ||
142 | * @param location 中国国测局地理坐标(GCJ-02) | ||
143 | * @return 世界标准地理坐标(WGS-84) | ||
144 | * @brief 中国国测局地理坐标(GCJ-02) 转换成 世界标准地理坐标(WGS-84) | ||
145 | * | ||
146 | * ####此接口有1-2米左右的误差,需要精确定位情景慎用 | ||
147 | */ | ||
148 | public static Point gcj02ToWgs84(Point location) { | ||
149 | return gcj02Decrypt(location.getY(), location.getX()); | ||
150 | } | ||
151 | |||
152 | /** | ||
153 | * @param location 世界标准地理坐标(WGS-84) | ||
154 | * @return 百度地理坐标(BD-09) | ||
155 | * @brief 世界标准地理坐标(WGS-84) 转换成 百度地理坐标(BD-09) | ||
156 | */ | ||
157 | public static Point wgs84ToBd09(Point location) { | ||
158 | Point gcj02Pt = gcj02Encrypt(location.getY(), location.getX()); | ||
159 | return bd09Encrypt(gcj02Pt.getY(), gcj02Pt.getX()); | ||
160 | } | ||
161 | |||
162 | /** | ||
163 | * @param location 中国国测局地理坐标(GCJ-02)<火星坐标> | ||
164 | * @return 百度地理坐标(BD-09) | ||
165 | * @brief 中国国测局地理坐标(GCJ-02)<火星坐标> 转换成 百度地理坐标(BD-09) | ||
166 | */ | ||
167 | public static Point gcj02ToBd09(Point location) { | ||
168 | return bd09Encrypt(location.getY(), location.getX()); | ||
169 | } | ||
170 | |||
171 | /** | ||
172 | * @param location 百度地理坐标(BD-09) | ||
173 | * @return 中国国测局地理坐标(GCJ-02)<火星坐标> | ||
174 | * @brief 百度地理坐标(BD-09) 转换成 中国国测局地理坐标(GCJ-02)<火星坐标> | ||
175 | */ | ||
176 | public static Point bd09ToGcj02(Point location) { | ||
177 | return bd09Decrypt(location.getY(), location.getX()); | ||
178 | } | ||
179 | |||
180 | /** | ||
181 | * @param location 百度地理坐标(BD-09) | ||
182 | * @return 世界标准地理坐标(WGS-84) | ||
183 | * @brief 百度地理坐标(BD-09) 转换成 世界标准地理坐标(WGS-84) | ||
184 | * | ||
185 | * ####此接口有1-2米左右的误差,需要精确定位情景慎用 | ||
186 | */ | ||
187 | public static Point bd09ToWgs84(Point location) { | ||
188 | Point gcj02 = bd09ToGcj02(location); | ||
189 | return gcj02Decrypt(gcj02.getY(), gcj02.getX()); | ||
190 | } | ||
191 | |||
192 | } |
... | @@ -28,4 +28,5 @@ | ... | @@ -28,4 +28,5 @@ |
28 | android:layout_marginLeft="0dp" | 28 | android:layout_marginLeft="0dp" |
29 | app:srcCompat="@mipmap/ic_my_location_white_48dp" /> | 29 | app:srcCompat="@mipmap/ic_my_location_white_48dp" /> |
30 | </android.support.v7.widget.LinearLayoutCompat> | 30 | </android.support.v7.widget.LinearLayoutCompat> |
31 | |||
31 | </android.support.constraint.ConstraintLayout> | 32 | </android.support.constraint.ConstraintLayout> | ... | ... |
-
Please register or sign in to post a comment