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