Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
app-FounderMap
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
常超
app-FounderMap
Commits
0d0d6e64
Commit
0d0d6e64
authored
Mar 31, 2021
by
Luosp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
导航基本完成,需优化
parent
94111397
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
1539 additions
and
974 deletions
+1539
-974
arcgislib/build.gradle
+5
-28
arcgislib/libs/MineNaviSDK-3.0.4.aar
+0
-0
arcgislib/src/main/assets/sprite2.png
+0
-0
arcgislib/src/main/assets/sprite3.png
+0
-0
arcgislib/src/main/java/cn/com/founder/arcgislib/constants/Constants.java
+93
-52
arcgislib/src/main/java/cn/com/founder/arcgislib/navi/ArcGisNavi.java
+25
-23
arcgislib/src/main/java/cn/com/founder/arcgislib/navi/option/IArcGisNaviOption.java
+25
-22
arcgislib/src/main/java/cn/com/founder/arcgislib/utils/GpsUtil.java
+1
-1
arcgislib/src/main/java/cn/com/founder/arcgislib/utils/PermissionUtil.java
+5
-0
arcgislib/src/main/java/cn/com/founder/arcgislib/utils/ToolUtil.java
+38
-0
arcgislib/src/main/java/cn/com/founder/arcgislib/view/ArcGisLocationView.java
+9
-12
arcgislib/src/main/java/cn/com/founder/arcgislib/view/ArcGisNaviView.java
+1161
-810
arcgislib/src/main/res/layout/layout_navi.xml
+8
-8
arcgislib/src/main/res/layout/layout_navi_bottom.xml
+133
-3
arcgislib/src/main/res/values/colors.xml
+3
-0
arcgislib/src/main/res/values/colors_navi.xml
+31
-15
arcgislib/src/main/res/values/strings.xml
+2
-0
No files found.
arcgislib/build.gradle
View file @
0d0d6e64
...
@@ -11,8 +11,6 @@ android {
...
@@ -11,8 +11,6 @@ android {
consumerProguardFiles
'consumer-rules.pro'
consumerProguardFiles
'consumer-rules.pro'
ndk
{
ndk
{
abiFilters
"armeabi-v7a"
abiFilters
"armeabi-v7a"
// abiFilters "arm64-v8a"
// abiFilters "armeabi"
}
}
}
}
...
@@ -29,28 +27,6 @@ android {
...
@@ -29,28 +27,6 @@ android {
sourceCompatibility
JavaVersion
.
VERSION_1_8
sourceCompatibility
JavaVersion
.
VERSION_1_8
targetCompatibility
JavaVersion
.
VERSION_1_8
targetCompatibility
JavaVersion
.
VERSION_1_8
}
}
sourceSets
{
main
{
assets
.
srcDirs
=
[
'src/main/assets'
,
'src/main/assets/'
]
}
}
packagingOptions
{
exclude
'assets/tnavi/HCI_AUTH/HCI_AUTH_FOREVER'
exclude
'assets/tnavi/log/gpspos_data.txt'
exclude
'assets/tnavi/pdata/fx.sdb'
exclude
'assets/tnavi/pdata/font.pdt'
exclude
'assets/tnavi/pdata/res.pdt'
exclude
'assets/tnavi/sdb/cdata/rsh_0.sdb'
exclude
'assets/tnavi/sdb/cdata/zon.sdb'
exclude
'assets/tnavi/sdb/cdata/man.cdt'
exclude
'assets/tnavi/sdb/cdata/rsh.sdb'
exclude
'assets/tnavi/sdb/cdata/url.cdt'
exclude
'assets/tnavi/sdb/cdata/gd.sdb'
exclude
'assets/tnavi/sdb/cdata/ano.cdt'
exclude
'assets/tnavi/sdb/adata/tmp'
exclude
'assets/tnavi/config.ini'
exclude
'assets/tnavi/Dictionary.Dat'
exclude
'assets/tnavi/udata/utmp.txt'
exclude
'assets/tnavi/DictionaryWordSort.dat'
exclude
'assets/AccountInfo.txt'
}
}
}
dependencies
{
dependencies
{
...
@@ -65,9 +41,10 @@ dependencies {
...
@@ -65,9 +41,10 @@ dependencies {
//日志类
//日志类
implementation
'com.jakewharton.timber:timber:4.5.1'
implementation
'com.jakewharton.timber:timber:4.5.1'
//工具类
//工具类
implementation
'com.google.code.gson:gson:2.8.5'
implementation
'com.mapzen.android:lost:2.1.2'
implementation
'com.squareup.okhttp3:okhttp:3.12.3'
implementation
'com.squareup.okhttp3:okhttp:3.12.3'
implementation
'org.greenrobot:eventbus:3.0.0'
implementation
'com.gyf.immersionbar:immersionbar:3.0.0'
implementation
'com.google.code.gson:gson:2.8.6'
implementation
'com.mapzen.android:lost:2.1.2'
implementation
'com.jakewharton.timber:timber:4.7.0'
}
}
apply
from:
'../mvn_push.gradle'
arcgislib/libs/MineNaviSDK-3.0.4.aar
0 → 100644
View file @
0d0d6e64
File added
arcgislib/src/main/assets/sprite2.png
deleted
100644 → 0
View file @
94111397
49.2 KB
arcgislib/src/main/assets/sprite3.png
deleted
100644 → 0
View file @
94111397
48.3 KB
arcgislib/src/main/java/cn/com/founder/arcgislib/constants/Constants.java
View file @
0d0d6e64
...
@@ -10,39 +10,58 @@ package cn.com.founder.arcgislib.constants;
...
@@ -10,39 +10,58 @@ package cn.com.founder.arcgislib.constants;
public
class
Constants
{
public
class
Constants
{
/*****************************************互联网*********************************************/
/*****************************************互联网*********************************************/
//互联网-地图
//互联网-地图
private
static
String
baseUrl
=
"http://47.92.225.109:6080/arcgis/rest/services/founder/dg20191120/MapServer"
;
private
static
String
baseUrl
=
"http://47.92.225.109:6080/arcgis/rest/services/founder/dg20191120/MapServer"
;
//互联网-Geo
//互联网-Geo
private
static
String
baseGeoUrl
=
"http://68.174.25.107:8090/esBzdzTestQuery"
;
private
static
String
baseGeoUrl
=
"http://68.174.25.107:8090/esBzdzTestQuery"
;
//互联网-搜索
//互联网-搜索
private
static
String
searchUrl
=
"http://47.92.226.24:8051/selectPoiDataList"
;
private
static
String
searchUrl
=
"http://47.92.226.24:8051/selectPoiDataList"
;
//互联网-导航
//互联网-导航
private
static
String
naviUrl
=
"minedata.cn/lbsservice/navi/"
;
// 逆地理编码服务
//二标四实-单位
private
static
String
baseInverseUrl
=
"http://minedata.cn/lbsservice/service/coder/reverseGeocodingEx"
;
private
static
String
dwUrl
=
"http://68.174.69.46:8051/selectVdwjx"
;
// // 搜索服务
//二标四实-房屋
private
static
String
baseSearchUrl
=
"http://onlinesearch.trafficeye.com.cn:16001/search2020/"
;
private
static
String
fwUrl
=
"http://68.174.69.46:8051/selectVfwjx"
;
// //算路服务
//二标四实-地址
private
static
String
baseRouteingUrl
=
"http://navicore.mapbar.com/nc/v1/routing"
;
private
static
String
dzUrl
=
"http://68.174.69.46:8051/selectVdzjx"
;
// //路口放大图服务
private
static
String
baseExpandViewUrl
=
"https://navicore.mapbar.com/nc/v1/jv/roadnet"
;
//测试网络接口
private
static
String
baseNetworkUrl
=
""
;
//华为网关鉴权服务-accessToken(导航时调用)
//二标四实-单位
private
static
String
apiGUrl
=
"https://68.26.19.197:8343/v1/apigw/oauth2/token"
;
private
static
String
dwUrl
=
"http://68.174.69.46:8051/selectVdwjx"
;
//华为网关鉴权服务-userToken(导航时调用)
//二标四实-房屋
private
static
String
apiGLoginUrl
=
"http://68.26.19.197:8380/dcuc/api/checklogin.action"
;
private
static
String
fwUrl
=
"http://68.174.69.46:8051/selectVfwjx"
;
//热力图
//二标四实-地址
private
static
String
hotMapUrl
=
"http://47.92.225.109:6080/arcgis/rest/services/gp/rltModel/GPServer/hotPotServer"
;
private
static
String
dzUrl
=
"http://68.174.69.46:8051/selectVdzjx"
;
//华为网关鉴权服务-accessToken(导航时调用)
private
static
String
apiGUrl
=
"https://68.26.19.197:8343/v1/apigw/oauth2/token"
;
//华为网关鉴权服务-userToken(导航时调用)
private
static
String
apiGLoginUrl
=
"http://68.26.19.197:8380/dcuc/api/checklogin.action"
;
//热力图
private
static
String
hotMapUrl
=
"http://47.92.225.109:6080/arcgis/rest/services/gp/rltModel/GPServer/hotPotServer"
;
// private static String hotMapUrl = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/911CallsHotspot/GPServer/911%20Calls%20Hotspot";
// private static String hotMapUrl = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/911CallsHotspot/GPServer/911%20Calls%20Hotspot";
/**********************************************************************************************/
/**********************************************************************************************/
/*****************************************用户网***********************************************
/*****************************************用户网***********************************************
//如果使用公安局的映射,导航907和958行代码需要修改坐标系
//如果使用公安局的映射,导航907和958行代码需要修改坐标系
//用户网-地图
//用户网-地图
private static String baseUrl = "http://192.168.2.56:19076/arcgis/rest/services/founder/dg20191120/MapServer";
private static String baseUrl = "http://192.168.2.56:19076/arcgis/rest/services/founder/dg20191120/MapServer";
//用户网-导航
//用户网-导航
private static String naviUrl = "192.168.2.56:19095/PPmap/LBSservice2/";
// 逆地理编码服务
private static String baseInverseUrl = "http://192.168.2.56:19095/PPmap/LBSservice/service/coder/reverseGeocodingEx";
// 搜索服务
private static String baseSearchUrl = "http://192.168.2.56:19095/PPmap/LBSservice/search/";
//算路服务
private static String baseRouteingUrl = "http://192.168.2.56:19095/PPmap/nc/v1/routing";
//路口放大图服务
private static String baseExpandViewUrl = "http://192.168.2.56:19095/PPmap/nc/v1/jv/roadnet";
//测试网络接口
private static String baseNetworkUrl = "http://192.168.2.56:19095/PPmap/LBSservice/search/keyword?token=1111&page=1&count=10&adCode=440100&key=123";
//公安网-Geo
//公安网-Geo
private static String baseGeoUrl = "http://192.168.2.56:19087/esBzdzTestQuery";
private static String baseGeoUrl = "http://192.168.2.56:19087/esBzdzTestQuery";
//用户网-搜索
//用户网-搜索
...
@@ -53,38 +72,47 @@ public class Constants {
...
@@ -53,38 +72,47 @@ public class Constants {
private static String fwUrl = "http://192.168.2.56:19084/selectVfwjx";
private static String fwUrl = "http://192.168.2.56:19084/selectVfwjx";
//二标四实-地址
//二标四实-地址
private static String dzUrl = "http://192.168.2.56:19084/selectVdzjx";
private static String dzUrl = "http://192.168.2.56:19084/selectVdzjx";
//华为网关鉴权服务-accessToken(导航时调用)
//华为网关鉴权服务-accessToken(导航时调用)
private static String apiGUrl = "https://192.168.2.56:19098/v1/apigw/oauth2/token";
private static String apiGUrl = "https://192.168.2.56:19098/v1/apigw/oauth2/token";
//华为网关鉴权服务-userToken(导航时调用)
//华为网关鉴权服务-userToken(导航时调用)
private static String apiGLoginUrl = "http://192.168.2.56:19095/dcuc/api/checklogin.action";
private static String apiGLoginUrl = "http://192.168.2.56:19095/dcuc/api/checklogin.action";
//热力图
//热力图
private static String hotMapUrl = "http://192.168.2.56:19088/arcgis/rest/services/gp/rltModel/GPServer/hotPotServer";
private static String hotMapUrl = "http://192.168.2.56:19088/arcgis/rest/services/gp/rltModel/GPServer/hotPotServer";
/**********************************************************************************************
/**********************************************************************************************
/*****************************************公安网***********************************************
/*****************************************公安网***********************************************
//公安网-地图
//公安网-地图
private static String baseUrl = "http://68.174.69.45:6080/arcgis/rest/services/founder/dg20191120/MapServer";
private static String baseUrl = "http://68.174.69.45:6080/arcgis/rest/services/founder/dg20191120/MapServer";
//公安网-Geo
//公安网-Geo
private static String baseGeoUrl = "http://68.174.25.107:8090/esBzdzTestQuery";
private static String baseGeoUrl = "http://68.174.25.107:8090/esBzdzTestQuery";
//公安网-搜索
//公安网-搜索
private static String searchUrl = "http://68.174.69.46:8051/selectPoiDataList";
private static String searchUrl = "http://68.174.69.46:8051/selectPoiDataList";
//公安网-导航
//公安网-导航
private static String naviUrl = "68.26.19.197:8380/PPmap/LBSservice2/";
// 逆地理编码服务
//二标四实-单位
private static String baseInverseUrl = "http://68.26.19.197:8380/PPmap/LBSservice/service/coder/reverseGeocodingEx";
private static String dwUrl = "http://68.174.69.46:8051/selectVdwjx";
// 搜索服务
//二标四实-房屋
private static String baseSearchUrl = "http://68.26.19.197:8380/PPmap/LBSservice/search/";
private static String fwUrl = "http://68.174.69.46:8051/selectVfwjx";
//算路服务
//二标四实-地址
private static String baseRouteingUrl = "http://68.26.19.197:8380/PPmap/nc/v1/routing";
private static String dzUrl = "http://68.174.69.46:8051/selectVdzjx";
//路口放大图服务
//华为网关鉴权服务-accessToken(导航时调用)
private static String baseExpandViewUrl = "http://68.26.19.197:8380/PPmap/nc/v1/jv/roadnet";
private static String apiGUrl = "https://68.26.19.197:8343/v1/apigw/oauth2/token";
//测试网络接口
//华为网关鉴权服务-userToken(导航时调用)
private static String baseNetworkUrl = "http://68.26.19.197:8380/PPmap/LBSservice/search/keyword?token=1111&page=1&count=10&adCode=440100&key=123";
private static String apiGLoginUrl = "http://68.26.19.197:8380/dcuc/api/checklogin.action";
//二标四实-单位
//热力图
private static String dwUrl = "http://68.174.69.46:8051/selectVdwjx";
private static String hotMapUrl = "http://68.174.69.45:6081/arcgis/rest/services/gp/rltModel/GPServer/hotPotServer";
//二标四实-房屋
private static String fwUrl = "http://68.174.69.46:8051/selectVfwjx";
//二标四实-地址
private static String dzUrl = "http://68.174.69.46:8051/selectVdzjx";
//华为网关鉴权服务-accessToken(导航时调用)
private static String apiGUrl = "https://68.26.19.197:8343/v1/apigw/oauth2/token";
//华为网关鉴权服务-userToken(导航时调用)
private static String apiGLoginUrl = "http://68.26.19.197:8380/dcuc/api/checklogin.action";
//热力图
private static String hotMapUrl = "http://68.174.69.45:6081/arcgis/rest/services/gp/rltModel/GPServer/hotPotServer";
/**********************************************************************************************/
/**********************************************************************************************/
// argis证书
// argis证书
private
static
String
baseRunTime
=
"runtimelite,1000,rud9526010123,none,XXMFA0PL4S0MC2EN0175"
;
private
static
String
baseRunTime
=
"runtimelite,1000,rud9526010123,none,XXMFA0PL4S0MC2EN0175"
;
...
@@ -99,6 +127,8 @@ public class Constants {
...
@@ -99,6 +127,8 @@ public class Constants {
private
static
String
baseHuaweiAuthP
=
"JWY@123CJH"
;
private
static
String
baseHuaweiAuthP
=
"JWY@123CJH"
;
private
static
String
baseHuaweiAuthAppKey
=
"2a1c50f40af443a4b58d1375e87a4810"
;
private
static
String
baseHuaweiAuthAppKey
=
"2a1c50f40af443a4b58d1375e87a4810"
;
private
static
String
baseHuaweiAuthAppSecret
=
"1321cbbf9f3947108aee3f44ea007485"
;
private
static
String
baseHuaweiAuthAppSecret
=
"1321cbbf9f3947108aee3f44ea007485"
;
//arcGis证书
//arcGis证书
public
static
final
String
BASE_MAP_RUNTIME
=
baseRunTime
;
public
static
final
String
BASE_MAP_RUNTIME
=
baseRunTime
;
//服务器Url
//服务器Url
...
@@ -111,8 +141,6 @@ public class Constants {
...
@@ -111,8 +141,6 @@ public class Constants {
public
static
final
String
BASE_GEO_URL
=
baseGeoUrl
;
public
static
final
String
BASE_GEO_URL
=
baseGeoUrl
;
//搜索
//搜索
public
static
final
String
BASE_SEARCH_URL
=
searchUrl
;
public
static
final
String
BASE_SEARCH_URL
=
searchUrl
;
//导航
public
static
final
String
BASE_NAVI_URL
=
naviUrl
;
//热力图
//热力图
public
static
final
String
BASE_HOT_POTS_URL
=
hotMapUrl
;
public
static
final
String
BASE_HOT_POTS_URL
=
hotMapUrl
;
...
@@ -131,7 +159,20 @@ public class Constants {
...
@@ -131,7 +159,20 @@ public class Constants {
public
static
final
String
BASE_HUA_WEI_AUTH_APPKEY
=
baseHuaweiAuthAppKey
;
public
static
final
String
BASE_HUA_WEI_AUTH_APPKEY
=
baseHuaweiAuthAppKey
;
public
static
final
String
BASE_HUA_WEI_AUTH_APP_SECRET
=
baseHuaweiAuthAppSecret
;
public
static
final
String
BASE_HUA_WEI_AUTH_APP_SECRET
=
baseHuaweiAuthAppSecret
;
// 逆地理编码服务
public
static
final
String
BASE_NAVI_INVERSE_URL
=
baseInverseUrl
;
// // 搜索服务
public
static
final
String
BASE_NAVI_SEARCH_URL
=
baseSearchUrl
;
// //算路服务
public
static
final
String
BASE_NAVI_ROUTEING_URL
=
baseRouteingUrl
;
// //路口放大图服务
public
static
final
String
BASE_NAVI_EXPAND_VIEW_URL
=
baseExpandViewUrl
;
//测试网络接口
public
static
final
String
BASE_NAVI_NETWORK_URL
=
baseNetworkUrl
;
//华为网关鉴权服务-userToken
//华为网关鉴权服务-userToken
public
static
final
String
BASE_APIG_LOGIN_URL
=
apiGLoginUrl
;
public
static
final
String
BASE_APIG_LOGIN_URL
=
apiGLoginUrl
;
}
}
arcgislib/src/main/java/cn/com/founder/arcgislib/navi/ArcGisNavi.java
View file @
0d0d6e64
package
cn
.
com
.
founder
.
arcgislib
.
navi
;
package
cn
.
com
.
founder
.
arcgislib
.
navi
;
import
cn.com.founder.arcgislib.common.Variable
;
import
cn.com.founder.arcgislib.model.PointModel
;
import
cn.com.founder.arcgislib.navi.option.IArcGisNaviOption
;
import
cn.com.founder.arcgislib.navi.option.IArcGisNaviOption
;
import
cn.com.founder.arcgislib.view.ArcGisNaviView
;
import
cn.com.founder.arcgislib.view.ArcGisNaviView
;
...
@@ -21,27 +23,27 @@ public class ArcGisNavi implements IArcGisNaviOption {
...
@@ -21,27 +23,27 @@ public class ArcGisNavi implements IArcGisNaviOption {
this
.
mArcGisNaviView
=
arcGisNaviView
;
this
.
mArcGisNaviView
=
arcGisNaviView
;
}
}
//
@Override
@Override
//
public IArcGisNaviOption setShowNaviLayout(boolean isShow) {
public
IArcGisNaviOption
setShowNaviLayout
(
boolean
isShow
)
{
//
mArcGisNaviView.setShowNaviLayout(isShow);
mArcGisNaviView
.
setShowNaviLayout
(
isShow
);
//
return this;
return
this
;
//
}
}
//
//
@Override
@Override
//
public IArcGisNaviOption setNaviViewLocation(Variable.ViewLocation location) {
public
IArcGisNaviOption
setNaviViewLocation
(
Variable
.
ViewLocation
location
)
{
//
mArcGisNaviView.setNaviViewLocation(location);
mArcGisNaviView
.
setNaviViewLocation
(
location
);
//
return this;
return
this
;
//
}
}
//
//
@Override
@Override
//
public IArcGisNaviOption setNaviImage(int naviImage) {
public
IArcGisNaviOption
setNaviImage
(
int
naviImage
)
{
//
mArcGisNaviView.setNaviImage(naviImage);
mArcGisNaviView
.
setNaviImage
(
naviImage
);
//
return this;
return
this
;
//
}
}
//
//
@Override
@Override
//
public IArcGisNaviOption setCustomPointNavi(PointModel startPoint, PointModel endPoint) {
public
IArcGisNaviOption
setCustomPointNavi
(
PointModel
startPoint
,
PointModel
endPoint
)
{
//
mArcGisNaviView.setCustomPointNavi(startPoint,endPoint);
mArcGisNaviView
.
setCustomPointNavi
(
startPoint
,
endPoint
);
//
return this;
return
this
;
//
}
}
}
}
arcgislib/src/main/java/cn/com/founder/arcgislib/navi/option/IArcGisNaviOption.java
View file @
0d0d6e64
package
cn
.
com
.
founder
.
arcgislib
.
navi
.
option
;
package
cn
.
com
.
founder
.
arcgislib
.
navi
.
option
;
import
cn.com.founder.arcgislib.common.Variable
;
import
cn.com.founder.arcgislib.model.PointModel
;
/**
/**
* Copyright: 方正国际软件有限公司
* Copyright: 方正国际软件有限公司
* Author:luo_shaopeng
* Author:luo_shaopeng
...
@@ -9,26 +12,26 @@ package cn.com.founder.arcgislib.navi.option;
...
@@ -9,26 +12,26 @@ package cn.com.founder.arcgislib.navi.option;
* Description:导航操作
* Description:导航操作
*/
*/
public
interface
IArcGisNaviOption
{
public
interface
IArcGisNaviOption
{
//
/**
/**
//
* @param isShow boolean-是否显示导航布局
* @param isShow boolean-是否显示导航布局
//
* 默认隐藏
* 默认隐藏
//
*/
*/
//
IArcGisNaviOption setShowNaviLayout(boolean isShow);
IArcGisNaviOption
setShowNaviLayout
(
boolean
isShow
);
//
//
/**
/**
//
* @param location {@link Variable.ViewLocation } NaviView显示位置
* @param location {@link Variable.ViewLocation } NaviView显示位置
//
*/
*/
//
IArcGisNaviOption setNaviViewLocation(Variable.ViewLocation location);
IArcGisNaviOption
setNaviViewLocation
(
Variable
.
ViewLocation
location
);
//
//
/**
/**
//
* @param naviImage int(资源ID)-导航图片
* @param naviImage int(资源ID)-导航图片
//
*/
*/
//
IArcGisNaviOption setNaviImage(int naviImage);
IArcGisNaviOption
setNaviImage
(
int
naviImage
);
//
//
/**
/**
//
* 自定义点导航
* 自定义点导航
//
* @param startPoint 起点
* @param startPoint 起点
//
* @param endPoint 终点
* @param endPoint 终点
//
*/
*/
//
IArcGisNaviOption setCustomPointNavi(PointModel startPoint, PointModel endPoint);
IArcGisNaviOption
setCustomPointNavi
(
PointModel
startPoint
,
PointModel
endPoint
);
}
}
arcgislib/src/main/java/cn/com/founder/arcgislib/utils/GpsUtil.java
View file @
0d0d6e64
...
@@ -54,7 +54,7 @@ public class GpsUtil {
...
@@ -54,7 +54,7 @@ public class GpsUtil {
}
}
/**
/**
* Description: WGS-84 to
GCJ-02
<BR>
* Description: WGS-84 to
d
<BR>
*
*
* @param latitude 纬度
* @param latitude 纬度
* @param longitude 经度
* @param longitude 经度
...
...
arcgislib/src/main/java/cn/com/founder/arcgislib/utils/PermissionUtil.java
View file @
0d0d6e64
...
@@ -6,6 +6,7 @@ import android.os.Build;
...
@@ -6,6 +6,7 @@ import android.os.Build;
import
android.widget.Toast
;
import
android.widget.Toast
;
import
com.yanzhenjie.permission.AndPermission
;
import
com.yanzhenjie.permission.AndPermission
;
import
com.yanzhenjie.permission.runtime.Permission
;
import
java.util.List
;
import
java.util.List
;
...
@@ -18,6 +19,10 @@ import java.util.List;
...
@@ -18,6 +19,10 @@ import java.util.List;
*/
*/
public
class
PermissionUtil
{
public
class
PermissionUtil
{
public
static
final
String
[]
STORAGE_LOCATION_PERMISSION_GROUP
=
new
String
[]{
Permission
.
READ_EXTERNAL_STORAGE
,
Permission
.
WRITE_EXTERNAL_STORAGE
,
Permission
.
ACCESS_COARSE_LOCATION
,
Permission
.
ACCESS_FINE_LOCATION
};
public
static
final
String
[]
LOCATION_PERMISSION_GROUP
=
new
String
[]{
Permission
.
ACCESS_COARSE_LOCATION
,
Permission
.
ACCESS_FINE_LOCATION
};
public
static
final
String
[]
STORAGE_PERMISSION_GROUP
=
new
String
[]{
Permission
.
READ_EXTERNAL_STORAGE
,
Permission
.
WRITE_EXTERNAL_STORAGE
};
/**
/**
* 请求权限
* 请求权限
* @param requestPermissionCode 总是拒绝后提示用户去设置
* @param requestPermissionCode 总是拒绝后提示用户去设置
...
...
arcgislib/src/main/java/cn/com/founder/arcgislib/utils/ToolUtil.java
View file @
0d0d6e64
...
@@ -329,4 +329,42 @@ public class ToolUtil {
...
@@ -329,4 +329,42 @@ public class ToolUtil {
};
};
return
hostnameVerifier
;
return
hostnameVerifier
;
}
}
/**
* 返回路程
*
* @param roadValue
* @return
*/
public
static
String
getRoadLenght
(
float
roadValue
)
{
String
speedText
=
String
.
valueOf
(
roadValue
/
1000
);
if
(
speedText
.
contains
(
"."
))
{
BigDecimal
b
=
new
BigDecimal
(
roadValue
/
1000
);
float
speed
=
b
.
setScale
(
1
,
BigDecimal
.
ROUND_HALF_UP
).
floatValue
();
return
String
.
valueOf
(
speed
);
}
else
{
return
speedText
;
}
}
/**
* 返回剩余的时间
*
* @param timeValue
* @return
*/
public
static
String
getRoadTime
(
int
timeValue
)
{
int
hour
=
timeValue
/
3600
;
int
minuter
=
(
timeValue
%
3600
)
/
60
;
if
(
hour
==
0
&&
minuter
==
0
)
{
return
timeValue
+
"秒"
;
}
else
if
(
hour
==
0
&&
minuter
!=
0
)
{
return
minuter
+
"分钟"
;
}
else
if
(
hour
!=
0
&&
minuter
==
0
)
{
return
hour
+
"小时"
;
}
else
{
return
hour
+
"小时"
+
minuter
+
"分钟"
;
}
}
}
}
arcgislib/src/main/java/cn/com/founder/arcgislib/view/ArcGisLocationView.java
View file @
0d0d6e64
...
@@ -47,7 +47,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol;
...
@@ -47,7 +47,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol;
import
com.google.gson.JsonArray
;
import
com.google.gson.JsonArray
;
import
com.google.gson.JsonObject
;
import
com.google.gson.JsonObject
;
import
com.yanzhenjie.permission.AndPermission
;
import
com.yanzhenjie.permission.AndPermission
;
import
com.yanzhenjie.permission.runtime.Permission
;
import
org.json.JSONException
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
org.json.JSONObject
;
...
@@ -81,8 +80,7 @@ import okhttp3.Response;
...
@@ -81,8 +80,7 @@ import okhttp3.Response;
* Description:位置相关类
* Description:位置相关类
*/
*/
public
class
ArcGisLocationView
extends
LinearLayout
implements
View
.
OnClickListener
,
ArcGisMapView
.
MyTouchLocationListener
{
public
class
ArcGisLocationView
extends
LinearLayout
implements
View
.
OnClickListener
,
ArcGisMapView
.
MyTouchLocationListener
{
private
final
String
[]
LOCTION_PERMISSION_GROUP
=
new
String
[]{
Permission
.
ACCESS_COARSE_LOCATION
,
Permission
.
ACCESS_FINE_LOCATION
};
private
final
String
[]
STORAGE_PERMISSION_GROUP
=
new
String
[]{
Permission
.
READ_EXTERNAL_STORAGE
,
Permission
.
WRITE_EXTERNAL_STORAGE
};
private
final
int
FLAG_START_LOCATION
=
0
;
private
final
int
FLAG_START_LOCATION
=
0
;
private
final
int
FLAG_CREATE_MARKER
=
1
;
private
final
int
FLAG_CREATE_MARKER
=
1
;
...
@@ -140,7 +138,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
...
@@ -140,7 +138,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
/**
/**
* 定位图片
* 定位图片
*/
*/
pr
ivate
ImageView
mLocationIv
;
pr
otected
ImageView
mLocationIv
;
/**
/**
* 导入图片
* 导入图片
*/
*/
...
@@ -248,10 +246,9 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
...
@@ -248,10 +246,9 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
this
.
mLabelLocationNormalImage
=
R
.
drawable
.
icon_label_location_normal
;
this
.
mLabelLocationNormalImage
=
R
.
drawable
.
icon_label_location_normal
;
this
.
mLabelLocationSelectedImage
=
R
.
drawable
.
icon_label_location_selected
;
this
.
mLabelLocationSelectedImage
=
R
.
drawable
.
icon_label_location_selected
;
this
.
mFollowMapGetCenterPoint
=
false
;
this
.
mFollowMapGetCenterPoint
=
false
;
arcGisMapView
.
setMyTouchLocationListener
(
this
);
mCalloutStyleBuilder
=
new
CalloutStyleBuilder
(
context
);
mCalloutStyleBuilder
=
new
CalloutStyleBuilder
(
context
);
mCalloutContentBuilder
=
new
CalloutContentBuilder
();
mCalloutContentBuilder
=
new
CalloutContentBuilder
();
arcGisMapView
.
setMyTouchLocationListener
(
this
);
mMapView
.
getViewTreeObserver
().
addOnGlobalLayoutListener
(
new
ViewTreeObserver
.
OnGlobalLayoutListener
()
{
mMapView
.
getViewTreeObserver
().
addOnGlobalLayoutListener
(
new
ViewTreeObserver
.
OnGlobalLayoutListener
()
{
@Override
@Override
public
void
onGlobalLayout
()
{
public
void
onGlobalLayout
()
{
...
@@ -346,7 +343,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
...
@@ -346,7 +343,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
* @param scale
* @param scale
*/
*/
public
void
startLocation
(
double
x
,
double
y
,
double
scale
)
{
public
void
startLocation
(
double
x
,
double
y
,
double
scale
)
{
if
(
AndPermission
.
hasPermissions
(
getContext
(),
LOC
TION_PERMISSION_GROUP
))
{
if
(
AndPermission
.
hasPermissions
(
getContext
(),
PermissionUtil
.
LOCA
TION_PERMISSION_GROUP
))
{
ManualLocation
(
x
,
y
,
scale
);
ManualLocation
(
x
,
y
,
scale
);
}
else
{
}
else
{
PermissionUtil
.
requestPermission
(
getContext
(),
0
,
new
PermissionUtil
.
PermissionQuestListener
()
{
PermissionUtil
.
requestPermission
(
getContext
(),
0
,
new
PermissionUtil
.
PermissionQuestListener
()
{
...
@@ -363,7 +360,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
...
@@ -363,7 +360,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
public
String
onAlwaysDenied
()
{
public
String
onAlwaysDenied
()
{
return
"定位权限获取失败"
;
return
"定位权限获取失败"
;
}
}
},
LOC
TION_PERMISSION_GROUP
);
},
PermissionUtil
.
LOCA
TION_PERMISSION_GROUP
);
}
}
}
}
...
@@ -533,7 +530,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
...
@@ -533,7 +530,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
*/
*/
@TargetApi
(
Build
.
VERSION_CODES
.
LOLLIPOP
)
@TargetApi
(
Build
.
VERSION_CODES
.
LOLLIPOP
)
private
void
initLocationPermission
(
double
scale
)
{
private
void
initLocationPermission
(
double
scale
)
{
if
(
AndPermission
.
hasPermissions
(
getContext
(),
LOC
TION_PERMISSION_GROUP
))
{
if
(
AndPermission
.
hasPermissions
(
getContext
(),
PermissionUtil
.
LOCA
TION_PERMISSION_GROUP
))
{
getLocation
(
scale
);
getLocation
(
scale
);
}
else
{
}
else
{
PermissionUtil
.
requestPermission
(
getContext
(),
0
,
new
PermissionUtil
.
PermissionQuestListener
()
{
PermissionUtil
.
requestPermission
(
getContext
(),
0
,
new
PermissionUtil
.
PermissionQuestListener
()
{
...
@@ -550,7 +547,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
...
@@ -550,7 +547,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
public
String
onAlwaysDenied
()
{
public
String
onAlwaysDenied
()
{
return
"定位权限获取失败"
;
return
"定位权限获取失败"
;
}
}
},
LOC
TION_PERMISSION_GROUP
);
},
PermissionUtil
.
LOCA
TION_PERMISSION_GROUP
);
}
}
}
}
...
@@ -559,7 +556,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
...
@@ -559,7 +556,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
*/
*/
@TargetApi
(
Build
.
VERSION_CODES
.
LOLLIPOP
)
@TargetApi
(
Build
.
VERSION_CODES
.
LOLLIPOP
)
private
void
initStoragePermission
()
{
private
void
initStoragePermission
()
{
if
(
AndPermission
.
hasPermissions
(
getContext
(),
STORAGE_PERMISSION_GROUP
))
{
if
(
AndPermission
.
hasPermissions
(
getContext
(),
PermissionUtil
.
STORAGE_PERMISSION_GROUP
))
{
getSDTxtFile
();
getSDTxtFile
();
}
else
{
}
else
{
PermissionUtil
.
requestPermission
(
getContext
(),
0
,
new
PermissionUtil
.
PermissionQuestListener
()
{
PermissionUtil
.
requestPermission
(
getContext
(),
0
,
new
PermissionUtil
.
PermissionQuestListener
()
{
...
@@ -576,7 +573,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
...
@@ -576,7 +573,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
public
String
onAlwaysDenied
()
{
public
String
onAlwaysDenied
()
{
return
"文件读取权限失败"
;
return
"文件读取权限失败"
;
}
}
},
STORAGE_PERMISSION_GROUP
);
},
PermissionUtil
.
STORAGE_PERMISSION_GROUP
);
}
}
}
}
...
...
arcgislib/src/main/java/cn/com/founder/arcgislib/view/ArcGisNaviView.java
View file @
0d0d6e64
...
@@ -4,15 +4,16 @@ import android.annotation.SuppressLint;
...
@@ -4,15 +4,16 @@ import android.annotation.SuppressLint;
import
android.app.Activity
;
import
android.app.Activity
;
import
android.app.ProgressDialog
;
import
android.app.ProgressDialog
;
import
android.content.Context
;
import
android.content.Context
;
import
android.graphics.Bitmap
;
import
android.graphics.Point
;
import
android.graphics.Color
;
import
android.graphics.drawable.BitmapDrawable
;
import
android.graphics.drawable.BitmapDrawable
;
import
android.os.Handler
;
import
android.os.Handler
;
import
android.os.Message
;
import
android.os.Message
;
import
android.text.Spannable
;
import
android.text.TextUtils
;
import
android.text.TextUtils
;
import
android.util.AttributeSet
;
import
android.util.AttributeSet
;
import
android.util.Log
;
import
android.util.Log
;
import
android.view.Gravity
;
import
android.view.Gravity
;
import
android.view.KeyEvent
;
import
android.view.View
;
import
android.view.View
;
import
android.view.WindowManager
;
import
android.view.WindowManager
;
import
android.view.animation.Animation
;
import
android.view.animation.Animation
;
...
@@ -26,11 +27,9 @@ import android.widget.Toast;
...
@@ -26,11 +27,9 @@ import android.widget.Toast;
import
androidx.annotation.NonNull
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
androidx.annotation.Nullable
;
import
androidx.constraintlayout.widget.ConstraintLayout
;
import
androidx.core.content.ContextCompat
;
import
androidx.core.content.ContextCompat
;
import
com.esri.arcgisruntime.geometry.Geometry
;
import
com.esri.arcgisruntime.geometry.Geometry
;
import
com.esri.arcgisruntime.geometry.Point
;
import
com.esri.arcgisruntime.geometry.PointCollection
;
import
com.esri.arcgisruntime.geometry.PointCollection
;
import
com.esri.arcgisruntime.geometry.Polyline
;
import
com.esri.arcgisruntime.geometry.Polyline
;
import
com.esri.arcgisruntime.geometry.SpatialReference
;
import
com.esri.arcgisruntime.geometry.SpatialReference
;
...
@@ -38,33 +37,43 @@ import com.esri.arcgisruntime.mapping.view.Graphic;
...
@@ -38,33 +37,43 @@ import com.esri.arcgisruntime.mapping.view.Graphic;
import
com.esri.arcgisruntime.symbology.PictureMarkerSymbol
;
import
com.esri.arcgisruntime.symbology.PictureMarkerSymbol
;
import
com.esri.arcgisruntime.symbology.SimpleLineSymbol
;
import
com.esri.arcgisruntime.symbology.SimpleLineSymbol
;
import
com.google.gson.JsonObject
;
import
com.google.gson.JsonObject
;
import
com.minedata.minenavi.MineNaviMain
;
import
com.minedata.minenavi.SDKInitializer
;
import
com.minedata.minenavi.common.GeoPoint
;
import
com.minedata.minenavi.mapdal.CoordType
;
import
com.minedata.minenavi.common.JamPath
;
import
com.minedata.minenavi.mapdal.DataPreference
;
import
com.minedata.minenavi.common.OkHttp3Utils
;
import
com.minedata.minenavi.mapdal.GpsTracker
;
import
com.minedata.minenavi.navi.GidCamera
;
import
com.minedata.minenavi.mapdal.LatLng
;
import
com.minedata.minenavi.navi.GidDFM
;
import
com.minedata.minenavi.mapdal.MineNaviUtil
;
import
com.minedata.minenavi.navi.GidEvent
;
import
com.minedata.minenavi.mapdal.NativeEnv
;
import
com.minedata.minenavi.navi.GidLane
;
import
com.minedata.minenavi.mapdal.PoiFavorite
;
import
com.minedata.minenavi.navi.GidMatchRes
;
import
com.minedata.minenavi.mapdal.Tools
;
import
com.minedata.minenavi.navi.GidOption
;
import
com.minedata.minenavi.navi.ArrowInfo
;
import
com.minedata.minenavi.navi.GidPoint
;
import
com.minedata.minenavi.navi.ExpandView3
;
import
com.minedata.minenavi.navi.GidRemain
;
import
com.minedata.minenavi.navi.GuidanceText
;
import
com.minedata.minenavi.navi.MineNaviGuide
;
import
com.minedata.minenavi.navi.GuidanceTextGenerator
;
import
com.minedata.minenavi.navi.OnGuideEventListener
;
import
com.minedata.minenavi.navi.LaneDetector
;
import
com.minedata.minenavi.route.MineNaviRoute
;
import
com.minedata.minenavi.navi.LaneView
;
import
com.minedata.minenavi.route.PlanPoint
;
import
com.minedata.minenavi.navi.MineNaviListener
;
import
com.minedata.minenavi.route.RouteInfo
;
import
com.minedata.minenavi.navi.NaviProgressData
;
import
com.minedata.minenavi.route.RoutePlanOption
;
import
com.minedata.minenavi.navi.NaviProgressMonitor
;
import
com.minedata.minenavi.search.common.FileSource
;
import
com.minedata.minenavi.navi.NaviSession
;
import
com.minedata.minenavi.tts.TTSProvider
;
import
com.minedata.minenavi.navi.NaviSessionData
;
import
com.minedata.minenavi.navi.NaviSpeaker
;
import
com.minedata.minenavi.navi.RouteBase
;
import
com.minedata.minenavi.navi.RouteCollection
;
import
com.minedata.minenavi.navi.RouteExplorer
;
import
com.minedata.minenavi.navi.RoutePlan
;
import
com.minedata.minenavi.navi.RouteStatus
;
import
com.minedata.minenavi.navi.RouterErrorInfo
;
import
com.minedata.minenavi.navi.SmoothNaviData
;
import
com.minedata.minenavi.navi.TmcSections
;
import
com.minedata.minenavi.navi.TurnIconModel
;
import
com.minedata.minenavi.navi.TurnIconView
;
import
com.yanzhenjie.permission.AndPermission
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.
Date
;
import
java.util.
Arrays
;
import
java.util.List
;
import
java.util.List
;
import
java.util.concurrent.TimeUnit
;
import
cn.com.founder.arcgislib.R
;
import
cn.com.founder.arcgislib.R
;
import
cn.com.founder.arcgislib.common.Variable
;
import
cn.com.founder.arcgislib.common.Variable
;
...
@@ -72,19 +81,22 @@ import cn.com.founder.arcgislib.constants.Constants;
...
@@ -72,19 +81,22 @@ import cn.com.founder.arcgislib.constants.Constants;
import
cn.com.founder.arcgislib.model.PointModel
;
import
cn.com.founder.arcgislib.model.PointModel
;
import
cn.com.founder.arcgislib.model.SearchModel
;
import
cn.com.founder.arcgislib.model.SearchModel
;
import
cn.com.founder.arcgislib.search.listener.ISearchSelectedListener
;
import
cn.com.founder.arcgislib.search.listener.ISearchSelectedListener
;
import
cn.com.founder.arcgislib.utils.DensityUtil
;
import
cn.com.founder.arcgislib.utils.FormatUtil
;
import
cn.com.founder.arcgislib.utils.GpsUtil
;
import
cn.com.founder.arcgislib.utils.GpsUtil
;
import
cn.com.founder.arcgislib.utils.GsonUtil
;
import
cn.com.founder.arcgislib.utils.GsonUtil
;
import
cn.com.founder.arcgislib.utils.OkHttpUtil
;
import
cn.com.founder.arcgislib.utils.PermissionUtil
;
import
cn.com.founder.arcgislib.utils.ToolUtil
;
import
cn.com.founder.arcgislib.utils.ToolUtil
;
import
cn.com.founder.arcgislib.widget.navi.NaviBigMagBand
;
import
cn.com.founder.arcgislib.widget.navi.DistanceBean
;
import
cn.com.founder.arcgislib.widget.navi.NaviBottomBand
;
import
cn.com.founder.arcgislib.widget.navi.JamPath
;
import
cn.com.founder.arcgislib.widget.navi.NaviIndicatorBand
;
import
cn.com.founder.arcgislib.widget.navi.MyJunctionView
;
import
cn.com.founder.arcgislib.widget.navi.NaviSABand
;
import
cn.com.founder.arcgislib.widget.navi.RouteDrawStyle
;
import
cn.com.founder.arcgislib.widget.navi.ScreenUtil
;
import
cn.com.founder.arcgislib.widget.navi.SpannableBuilder
;
import
cn.com.founder.arcgislib.widget.navi.TimeBean
;
import
cn.com.founder.arcgislib.widget.navi.Utils
;
import
cn.com.founder.arcgislib.widget.popup.PopupLayout
;
import
cn.com.founder.arcgislib.widget.popup.PopupLayout
;
import
okhttp3.Call
;
import
okhttp3.Call
;
import
okhttp3.Callback
;
import
okhttp3.Callback
;
import
okhttp3.ConnectionPool
;
import
okhttp3.MultipartBody
;
import
okhttp3.MultipartBody
;
import
okhttp3.OkHttpClient
;
import
okhttp3.OkHttpClient
;
import
okhttp3.Request
;
import
okhttp3.Request
;
...
@@ -94,23 +106,20 @@ import okhttp3.Response;
...
@@ -94,23 +106,20 @@ import okhttp3.Response;
/**
/**
* Copyright: 方正国际软件有限公司
* Copyright: 方正国际软件有限公司
* Author:luo_shaopeng
* Author:luo_shaopeng
* Date:202
0/2/11 13:29
* Date:202
1/3/25 14:24
* EMail:luo_shaopeng@founder.com.cn
* EMail:luo_shaopeng@founder.com.cn
* Description:导航
* Description:导航
*/
*/
public
class
ArcGisNaviView
extends
FrameLayout
implements
View
.
OnClickListener
,
ISearchSelectedListener
{
public
class
ArcGisNaviView
extends
FrameLayout
implements
View
.
OnClickListener
,
ISearchSelectedListener
{
private
static
final
String
TAG
=
"ArcGisNaviView"
;
/**
* {@link ArcGisNaviView}
*/
protected
static
ArcGisNaviView
instance
;
protected
static
ArcGisNaviView
instance
;
/**
/**
* {@link Context}
* {@link Context}
*/
*/
private
Context
mContext
;
private
Context
mContext
;
private
View
rootView
;
/**
* 导航根布局
*/
private
LinearLayout
mNaviTotalLayout
;
/**
/**
* 导航图片
* 导航图片
*/
*/
...
@@ -120,37 +129,44 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
...
@@ -120,37 +129,44 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
*/
*/
private
ArcGisMapView
mArcGisMapView
;
private
ArcGisMapView
mArcGisMapView
;
/**
/**
*
popup
*
{@link ArcGisLocationView}
*/
*/
private
PopupLayout
popupLayout
;
private
ArcGisLocationView
arcGisLocationView
;
/**
/**
*
底部导航布局
*
{@link ArcGisSearchView}
*/
*/
private
View
bottomNaviParent
View
;
private
ArcGisSearchView
arcGisSearch
View
;
/**
/**
*
出发地
*
设置地图缩放值
*/
*/
private
TextView
startAddressTv
;
private
double
mapScanleValue
=
0
d
;
/**
/**
*
目的地
*
是否有搜索布局(没有的话需要新建搜索布局)
*/
*/
private
TextView
endAddressTv
;
private
boolean
hasArcGisSearchView
;
/**
/**
*
是否显示开始导航
*
popup
*/
*/
private
View
bottomView
;
private
PopupLayout
bottomInputPopupLayout
;
/**
/**
*
{@link ArcGisLocationView}
*
底部输入布局
*/
*/
private
ArcGisLocationView
arcGisLocation
View
;
private
View
bottomInputParent
View
;
/**
/**
*
{@link ArcGisSearchView}
*
出发地
*/
*/
private
ArcGisSearchView
arcGisSearchView
;
private
TextView
startAddressTv
;
/**
* 目的地
*/
private
TextView
endAddressTv
;
/**
/**
* 是否选择出发地
* 是否选择出发地
*/
*/
private
boolean
isSelectStartAddress
=
false
;
private
boolean
isSelectStartAddress
=
false
;
/**
/**
* 出发地信息
* 出发地信息
*/
*/
...
@@ -160,48 +176,122 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
...
@@ -160,48 +176,122 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
*/
*/
private
SearchModel
endSearchModel
;
private
SearchModel
endSearchModel
;
/**
/**
*
设置地图缩放值
*
底部导航布局
*/
*/
private
double
mapScanleValue
=
0
d
;
private
View
bottomNaviParentView
;
/**
* 底部导航文本
*/
private
TextView
bottomNaviTv
;
/**
* 导航提示页面根布局
*/
private
View
naviRootView
;
// 转向信息
private
LinearLayout
mNaviLayout
;
// 导航路口剩余距离
private
TextView
tv_turnDistance
;
// 导航路线名称
private
TextView
tv_turnRoadName
;
// 导航转向标
private
TurnIconView
mTurnIconView
;
// 转向动作
private
TextView
tv_turnAction
;
// 出口
private
TextView
mNavingExitPortTv
;
// 红绿灯
private
ImageView
iv_bottomTrafficLight
;
// 红绿灯数
private
TextView
tv_trafficLightNumber
;
// 剩余距离
private
TextView
tv_residualTimeDistance
;
// 到达时间
private
TextView
tv_arriveTime
;
// 剩余时间
private
TextView
tv_time
;
//放大图跟布局
private
LinearLayout
mjunctionViewDecorView
;
//放大图container
private
RelativeLayout
rl_junctionViewContainer
;
// 导航路口剩余距离
private
TextView
tv_turnDistanceInJunctionView
;
// 导航路线名称
private
TextView
tv_turnRoadNameInJunctionView
;
// 导航转向标
private
TurnIconView
mTurnIconViewInJunctionView
;
// 转向动作
private
TextView
tv_turnActionInJunctionView
;
// 放大图
private
MyJunctionView
junctionView
;
// 车道线
private
LaneView
laneView
;
/**
/**
*
导航
*
网络请求
*/
*/
private
MineNaviRoute
mineNaviRoute
;
private
OkHttpClient
okHttpClient
;
/**
/**
*
路径信息
*
加载框
*/
*/
private
List
<
RouteInfo
>
routeInfoList
=
new
ArrayList
<>();
protected
ProgressDialog
myDialog
;
/**
/**
*
语音播报
*
是否互联网环境
*/
*/
private
TTSProvider
ttsProvider
;
private
boolean
isInternetEnviron
;
/**
/**
*
路线导航
*
导航session
*/
*/
private
MineNaviGuide
mineNaviGuide
;
private
NaviSession
mNaviSession
;
// 起点
private
String
mStartName
;
private
Point
mStartPoint
=
new
Point
();
// 途径点
private
String
mPassName
;
private
Point
mPassPoint
=
new
Point
();
// 终点
private
String
mEndName
;
private
Point
mEndPoint
=
new
Point
();
//tempPoint
private
PointModel
tempStartPoint
;
private
PointModel
tempEndPoint
;
// 导航线
private
List
<
RouteBase
>
routeInfoList
;
private
RouteDrawStyle
routeDrawStyle
;
// 全程所需的时间
private
int
estimatedTime
;
// 全程的路程长度
private
int
length
;
// 路线规划结果集
private
RouteCollection
mRouteCollection
=
null
;
/**
/**
* 路径点集合
* 路径点集合
*/
*/
private
PointCollection
mPointCollection
;
private
PointCollection
mPointCollection
;
//导航板
/**
private
View
naviTipView
;
* 是否导航中
private
NaviIndicatorBand
naviIndicatorBand
;
*/
private
NaviBigMagBand
naviBigMagBand
;
private
boolean
isNaving
=
false
;
private
RelativeLayout
trafficBarLayout
;
private
ConstraintLayout
eyeBand
;
private
TextView
eyeSpeed
,
nowRoute
,
speed
;
private
ImageView
eyeImage
,
naviLandBand
;
private
NaviBottomBand
ll_navi_bottom_info_text
;
private
NaviSABand
naviSABand
;
private
boolean
isHasSearchView
;
private
OkHttpClient
okHttpClient
;
/**
/**
*
加载框
*
gps
*/
*/
protected
ProgressDialog
myDialog
;
private
GpsTracker
gpsTracker
=
null
;
private
Utils
mUtils
;
public
ArcGisNaviView
(
Context
context
,
ArcGisMapView
arcGisMapView
,
ArcGisLocationView
locationView
,
ArcGisSearchView
searchView
)
{
public
ArcGisNaviView
(
Context
context
,
ArcGisMapView
arcGisMapView
,
ArcGisLocationView
locationView
,
ArcGisSearchView
searchView
)
{
this
(
context
);
this
(
context
);
...
@@ -212,18 +302,19 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
...
@@ -212,18 +302,19 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
this
.
arcGisSearchView
=
new
ArcGisSearchView
(
mContext
,
arcGisLocationView
);
this
.
arcGisSearchView
=
new
ArcGisSearchView
(
mContext
,
arcGisLocationView
);
addView
(
arcGisSearchView
);
addView
(
arcGisSearchView
);
arcGisSearchView
.
setVisibility
(
View
.
GONE
);
arcGisSearchView
.
setVisibility
(
View
.
GONE
);
isHa
sSearchView
=
false
;
hasArcGi
sSearchView
=
false
;
}
else
{
}
else
{
this
.
arcGisSearchView
=
searchView
;
this
.
arcGisSearchView
=
searchView
;
isHa
sSearchView
=
true
;
hasArcGi
sSearchView
=
true
;
}
}
this
.
mapScanleValue
=
5
d
*
100000
*
(
1.0
/
5
);
this
.
mapScanleValue
=
5
d
*
100000
*
(
1.0
/
5
);
this
.
arcGisSearchView
.
setSearchSelectedListener
(
this
);
this
.
arcGisSearchView
.
setSearchSelectedListener
(
this
);
routeInfoList
=
new
ArrayList
<>();
routeDrawStyle
=
new
RouteDrawStyle
();
mPointCollection
=
new
PointCollection
(
SpatialReference
.
create
(
4326
));
mPointCollection
=
new
PointCollection
(
SpatialReference
.
create
(
4326
));
isInternetEnviron
=
TextUtils
.
isEmpty
(
Constants
.
BASE_NAVI_NETWORK_URL
);
// initApig();
initStoragePermission
();
// initRoute(null,null);
}
}
...
@@ -238,59 +329,76 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
...
@@ -238,59 +329,76 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
private
ArcGisNaviView
(
Context
context
,
@Nullable
AttributeSet
attrs
,
int
defStyleAttr
)
{
private
ArcGisNaviView
(
Context
context
,
@Nullable
AttributeSet
attrs
,
int
defStyleAttr
)
{
super
(
context
,
attrs
,
defStyleAttr
);
super
(
context
,
attrs
,
defStyleAttr
);
rootView
=
inflate
(
context
,
R
.
layout
.
layout_navi
,
this
);
View
rootView
=
inflate
(
context
,
R
.
layout
.
layout_navi
,
this
);
instance
=
this
;
instance
=
this
;
mNaviTotalLayout
=
rootView
.
findViewById
(
R
.
id
.
navi_layout
);
mNaviIv
=
rootView
.
findViewById
(
R
.
id
.
navi_iv
);
mNaviIv
=
rootView
.
findViewById
(
R
.
id
.
navi_iv
);
mNaviIv
.
setOnClickListener
(
this
);
mNaviIv
.
setOnClickListener
(
this
);
}
}
protected
void
showDialog
()
{
private
void
initStoragePermission
()
{
try
{
if
(
AndPermission
.
hasPermissions
(
getContext
(),
PermissionUtil
.
STORAGE_PERMISSION_GROUP
))
{
if
(
myDialog
!=
null
&&
myDialog
.
isShowing
())
{
initNavi
();
myDialog
.
dismiss
();
}
else
{
}
PermissionUtil
.
requestPermission
(
getContext
(),
0
,
new
PermissionUtil
.
PermissionQuestListener
()
{
myDialog
=
new
ProgressDialog
(
mContext
);
@Override
myDialog
.
setProgressStyle
(
ProgressDialog
.
STYLE_SPINNER
);
public
void
onGranted
()
{
myDialog
.
setMessage
(
"正在加载..."
);
initNavi
();
myDialog
.
setIndeterminate
(
false
);
}
myDialog
.
setCancelable
(
false
);
myDialog
.
show
();
@Override
}
catch
(
Exception
e
)
{
public
void
onDenied
(
List
<
String
>
data
)
{
}
@Override
public
String
onAlwaysDenied
()
{
return
"文件读取权限失败,导航组件加载失败"
;
}
},
PermissionUtil
.
STORAGE_PERMISSION_GROUP
);
}
}
}
}
/**
/**
*
关闭
*
初始化导航
*/
*/
protected
void
disDialog
()
{
private
void
initNavi
()
{
try
{
SDKInitializer
.
setSearchUrl
(
Constants
.
BASE_NAVI_SEARCH_URL
);
if
(
myDialog
!=
null
&&
myDialog
.
isShowing
())
{
SDKInitializer
.
setInverseUrl
(
Constants
.
BASE_NAVI_INVERSE_URL
);
myDialog
.
dismiss
();
SDKInitializer
.
setRouteingUrl
(
Constants
.
BASE_NAVI_ROUTEING_URL
);
}
SDKInitializer
.
setMonitorUrl
(
Constants
.
BASE_NAVI_NETWORK_URL
);
myDialog
=
null
;
SDKInitializer
.
setExpandViewUrl
(
Constants
.
BASE_NAVI_EXPAND_VIEW_URL
);
}
catch
(
Exception
e
)
{
SDKInitializer
.
setCoordType
(
CoordType
.
WGS84
);
SDKInitializer
.
outputLog
(
true
);
if
(!
isInternetEnviron
)
{
//互联网环境不需要鉴权
initApig
();
}
else
{
SDKInitializer
.
initialize
(
mContext
,
new
SDKInitializer
.
InitListener
()
{
@Override
public
void
onInitSuccess
()
{
//设置算路参数、导航使用的NaviSession
mNaviSession
=
NaviSession
.
getInstance
();
mNaviSession
.
addMineNaviListener
(
mineNaviListener
);
mNaviSession
.
enableSound
(
true
);
mNaviSession
.
setDataPreference
(
DataPreference
.
onlineOnly
);
}
@Override
public
void
onInitFailed
(
String
msg
)
{
//SDK初始化失败
Toast
.
makeText
(
mContext
,
msg
,
Toast
.
LENGTH_LONG
).
show
();
}
});
}
}
}
}
/**
/**
* 华为网关鉴权
* 华为网关鉴权
*/
*/
private
void
initApig
()
{
private
void
initApig
()
{
showDialog
();
showDialog
();
if
(
okHttpClient
==
null
)
{
if
(
okHttpClient
==
null
)
{
synchronized
(
OkHttp3Utils
.
class
)
{
okHttpClient
=
OkHttpUtil
.
getInstance
();
if
(
okHttpClient
==
null
)
{
okHttpClient
=
(
new
OkHttpClient
.
Builder
()).
connectTimeout
(
10L
,
TimeUnit
.
SECONDS
).
writeTimeout
(
10L
,
TimeUnit
.
SECONDS
).
readTimeout
(
10L
,
TimeUnit
.
SECONDS
)
.
connectionPool
(
new
ConnectionPool
(
5
,
1L
,
TimeUnit
.
SECONDS
))
.
sslSocketFactory
(
ToolUtil
.
getSSLSocketFactory
())
.
hostnameVerifier
(
ToolUtil
.
getHostnameVerifier
()).
build
();
}
}
}
}
RequestBody
formBodyBuilder
=
new
okhttp3
.
FormBody
.
Builder
().
add
(
"grant_type"
,
"client_credentials"
)
RequestBody
formBodyBuilder
=
new
okhttp3
.
FormBody
.
Builder
().
add
(
"grant_type"
,
"client_credentials"
)
...
@@ -298,8 +406,7 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
...
@@ -298,8 +406,7 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
.
add
(
"client_secret"
,
Constants
.
BASE_HUA_WEI_AUTH_APP_SECRET
)
.
add
(
"client_secret"
,
Constants
.
BASE_HUA_WEI_AUTH_APP_SECRET
)
.
build
();
.
build
();
Log
.
e
(
"0000000"
,
formBodyBuilder
.
toString
());
Log
.
e
(
"---APIG_URL----"
,
Constants
.
BASE_APIG_URL
);
Request
formBodyRequest
=
(
new
okhttp3
.
Request
.
Builder
()).
url
(
Constants
.
BASE_APIG_URL
).
post
(
formBodyBuilder
).
build
();
Request
formBodyRequest
=
(
new
okhttp3
.
Request
.
Builder
()).
url
(
Constants
.
BASE_APIG_URL
).
post
(
formBodyBuilder
).
build
();
Call
call
=
okHttpClient
.
newCall
(
formBodyRequest
);
Call
call
=
okHttpClient
.
newCall
(
formBodyRequest
);
call
.
enqueue
(
new
Callback
()
{
call
.
enqueue
(
new
Callback
()
{
...
@@ -314,33 +421,35 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
...
@@ -314,33 +421,35 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
if
(
response
.
isSuccessful
())
{
if
(
response
.
isSuccessful
())
{
if
(
response
.
body
()
!=
null
)
{
if
(
response
.
body
()
!=
null
)
{
String
responseStr
=
response
.
body
().
string
();
String
responseStr
=
response
.
body
().
string
();
Log
.
e
(
"responseStr1"
,
responseStr
);
JsonObject
jsonObject
=
GsonUtil
.
gsonToBean
(
responseStr
,
JsonObject
.
class
);
JsonObject
jsonObject
=
GsonUtil
.
gsonToBean
(
responseStr
,
JsonObject
.
class
);
String
appToken
=
jsonObject
.
get
(
"access_token"
).
getAsString
();
String
appToken
=
jsonObject
.
get
(
"access_token"
).
getAsString
();
RequestBody
requestBody
=
new
MultipartBody
.
Builder
().
setType
(
MultipartBody
.
FORM
).
addFormDataPart
(
"account"
,
Constants
.
BASE_HUA_WEI_AUTHA
)
RequestBody
requestBody
=
new
MultipartBody
.
Builder
().
setType
(
MultipartBody
.
FORM
)
.
addFormDataPart
(
"account"
,
Constants
.
BASE_HUA_WEI_AUTHA
)
.
addFormDataPart
(
"password"
,
Constants
.
BASE_HUA_WEI_AUTHP
).
build
();
.
addFormDataPart
(
"password"
,
Constants
.
BASE_HUA_WEI_AUTHP
).
build
();
Request
formDataRequest
=
(
new
okhttp3
.
Request
.
Builder
()).
url
(
Constants
.
BASE_APIG_LOGIN_URL
).
addHeader
(
"Authorization"
,
"Bearer "
+
appToken
).
post
(
requestBody
).
build
();
Log
.
e
(
"---APIG_LOGIN_URL----"
,
Constants
.
BASE_APIG_LOGIN_URL
);
Request
formDataRequest
=
(
new
okhttp3
.
Request
.
Builder
()).
url
(
Constants
.
BASE_APIG_LOGIN_URL
)
Log
.
e
(
"1111111"
,
formDataRequest
.
toString
());
.
addHeader
(
"Authorization"
,
"Bearer "
+
appToken
)
.
post
(
requestBody
)
.
build
();
Log
.
e
(
"---formDataRequest---"
,
formDataRequest
.
toString
());
Call
loginCall
=
okHttpClient
.
newCall
(
formDataRequest
);
Call
loginCall
=
okHttpClient
.
newCall
(
formDataRequest
);
loginCall
.
enqueue
(
new
Callback
()
{
loginCall
.
enqueue
(
new
Callback
()
{
@Override
@Override
public
void
onFailure
(
Call
call
,
IOException
e
)
{
public
void
onFailure
(
Call
call
,
IOException
e
)
{
disDialog
();
disDialog
();
Log
.
e
(
"Fail"
,
"e="
+
e
.
toString
());
Log
.
e
(
"Fail"
,
"e="
+
e
.
toString
());
}
}
@Override
@Override
public
void
onResponse
(
Call
call
,
Response
response
)
throws
IOException
{
public
void
onResponse
(
Call
call
,
Response
response
)
throws
IOException
{
disDialog
();
if
(
response
.
isSuccessful
())
{
if
(
response
.
isSuccessful
())
{
if
(
response
.
body
()
!=
null
)
{
if
(
response
.
body
()
!=
null
)
{
String
responseStr
=
response
.
body
().
string
();
String
responseStr
=
response
.
body
().
string
();
Log
.
e
(
"responseStr2
"
,
responseStr
);
// Log.e("---responseStr2---
", responseStr);
JsonObject
jsonObject
=
GsonUtil
.
gsonToBean
(
responseStr
,
JsonObject
.
class
);
JsonObject
jsonObject
=
GsonUtil
.
gsonToBean
(
responseStr
,
JsonObject
.
class
);
int
status
=
jsonObject
.
get
(
"statusCode"
).
getAsInt
();
int
status
=
jsonObject
.
get
(
"statusCode"
).
getAsInt
();
...
@@ -351,10 +460,12 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
...
@@ -351,10 +460,12 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
JsonObject
userTokenObject
=
resultObject
.
get
(
"userToken"
).
getAsJsonObject
();
JsonObject
userTokenObject
=
resultObject
.
get
(
"userToken"
).
getAsJsonObject
();
if
(
userTokenObject
!=
null
)
{
if
(
userTokenObject
!=
null
)
{
String
userToken
=
userTokenObject
.
get
(
"token"
).
getAsString
();
String
userToken
=
userTokenObject
.
get
(
"token"
).
getAsString
();
disDialog
();
Message
message
=
new
Message
();
Message
message
=
new
Message
();
message
.
obj
=
appToken
+
","
+
userToken
;
message
.
obj
=
appToken
+
","
+
userToken
;
mHandler
.
sendMessage
(
message
);
mHandler
.
sendMessage
(
message
);
}
}
}
}
}
}
...
@@ -363,7 +474,15 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
...
@@ -363,7 +474,15 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
}
}
}
}
});
});
}
else
{
disDialog
();
Log
.
e
(
"responseSuccess"
,
"body is null"
);
}
}
}
else
{
disDialog
();
Log
.
e
(
"responseFail"
,
response
.
toString
());
Log
.
e
(
"responseFailBody"
,
response
.
body
().
string
());
}
}
}
}
});
});
...
@@ -374,522 +493,111 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
...
@@ -374,522 +493,111 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
@Override
@Override
public
void
handleMessage
(
@NonNull
Message
msg
)
{
public
void
handleMessage
(
@NonNull
Message
msg
)
{
super
.
handleMessage
(
msg
);
super
.
handleMessage
(
msg
);
String
dataStr
=
(
String
)
msg
.
obj
;
String
dataStr
=
(
String
)
msg
.
obj
;
if
(!
TextUtils
.
isEmpty
(
dataStr
))
{
if
(!
TextUtils
.
isEmpty
(
dataStr
))
{
String
appToken
=
dataStr
.
split
(
","
)[
0
];
String
appToken
=
dataStr
.
split
(
","
)[
0
];
String
userToken
=
dataStr
.
split
(
","
)[
1
];
String
userToken
=
dataStr
.
split
(
","
)[
1
];
Log
.
e
(
"appToken"
,
appToken
);
Log
.
e
(
"userToken"
,
userToken
);
initRoute
(
appToken
,
userToken
);
}
else
{
Toast
.
makeText
(
mContext
,
"导航初始化失败,请重新启动"
,
Toast
.
LENGTH_LONG
).
show
();
}
}
};
private
void
initRoute
(
String
appToken
,
String
userToken
)
{
SDKInitializer
.
initialize
(
mContext
,
new
SDKInitializer
.
InitListener
()
{
//互联网是GCJ-02,内网是WGS-84:内网不用转,在互联网上测试时转换时先将自己的地图点(WGS-84,ArcGis(4326))转换成GCJ-02,获取到路网数据以后,再将GCJ-02转换成WGS-84坐标
@Override
if
(
mineNaviRoute
==
null
)
{
public
void
onInitSuccess
()
{
MineNaviMain
.
getInstance
().
setNaviURL
(
Constants
.
BASE_NAVI_URL
);
NativeEnv
.
addGlobalHttpHeader
(
"Authorization"
,
"Bearer "
+
appToken
);
/**
NativeEnv
.
addGlobalHttpHeader
(
"X-User-Token"
,
userToken
);
* 设置华为token
//设置算路参数、导航使用的NaviSession
*/
mNaviSession
=
NaviSession
.
getInstance
();
// MineNaviMain.getInstance().setHuaweicloudToken(appToken, userToken);
mNaviSession
.
addMineNaviListener
(
mineNaviListener
);
/**
mNaviSession
.
enableSound
(
true
);
* 获取路径
mNaviSession
.
setDataPreference
(
DataPreference
.
onlineOnly
);
*/
MineNaviMain
.
getInstance
().
init
(
FileSource
.
getCachePath
(
mContext
)
+
"/"
,
mContext
,
(
i
,
s
)
->
Log
.
e
(
"onSdkAuthComplete"
,
i
+
"#认证"
));
/**
* 获取MineNaviRoute对象
*/
mineNaviRoute
=
MineNaviRoute
.
getInstance
();
/**
* 初始化引擎
*/
mineNaviRoute
.
init
(
mContext
);
/**
* 初始化算路Option
*/
RoutePlanOption
routePlanOption
=
new
RoutePlanOption
();
/**
* 设置避让方式:RoutePlanOption.AvoidTraffic 避免拥堵,RoutePlanOption.AvoidFreey 避免高速
*/
routePlanOption
.
setAvoidRoadType
(
RoutePlanOption
.
AvoidTraffic
|
RoutePlanOption
.
AvoidFreey
);
//车牌号
routePlanOption
.
setCarNumber
(
""
);
/**
* 设置算路Option
*/
mineNaviRoute
.
setPlanOption
(
routePlanOption
);
/**
* 设置算路成功失败回调
*/
mineNaviRoute
.
setRoutePlanListener
(
i
->
{
Toast
.
makeText
(
mContext
,
"i="
+
i
,
Toast
.
LENGTH_LONG
).
show
();
if
(
i
==
MineNaviRoute
.
ErrorCode
.
success
||
i
==
MineNaviRoute
.
ErrorCode
.
successAndLimit
)
{
routeInfoList
.
clear
();
Toast
.
makeText
(
mContext
,
"路线规划完毕"
,
Toast
.
LENGTH_LONG
).
show
();
arcGisSearchView
.
disDialog
();
if
(
popupLayout
!=
null
)
{
popupLayout
.
dismiss
();
}
}
createNaviBt
();
// 语音播报
List
<
Integer
>
mergeRouteCalcCond
=
mineNaviRoute
.
getMergeRouteCalcCond
();
if
(
mergeRouteCalcCond
!=
null
&&
mergeRouteCalcCond
.
size
()
>
0
)
{
if
(
routeInfoList
.
size
()
>
0
)
{
routeInfoList
.
clear
();
}
//默认加载第一条
routeInfoList
.
add
(
mineNaviRoute
.
getRoutePath
(
mergeRouteCalcCond
.
get
(
0
)));
List
<
JamPath
>
coordList
=
routeInfoList
.
get
(
0
).
getCoordList
();
for
(
int
k
=
0
;
k
<
coordList
.
size
();
k
++)
{
List
<
GeoPoint
>
list
=
coordList
.
get
(
k
).
paths
;
for
(
int
m
=
0
;
m
<
list
.
size
();
m
++)
{
double
[]
pointArr
=
GpsUtil
.
toWGS84Point
(
list
.
get
(
m
).
getLatitude
(),
list
.
get
(
m
).
getLongitude
());
mPointCollection
.
add
(
new
Point
(
pointArr
[
1
],
pointArr
[
0
]));
}
}
Polyline
polyline
=
new
Polyline
(
mPointCollection
);
SimpleLineSymbol
lineSymbol
=
new
SimpleLineSymbol
(
SimpleLineSymbol
.
Style
.
SOLID
,
Color
.
RED
,
5
);
Graphic
routeGraphic
=
new
Graphic
(
polyline
,
lineSymbol
);
arcGisLocationView
.
mNaviGraphicsOverlay
.
getGraphics
().
add
(
routeGraphic
);
//显示所有点在屏幕内
Geometry
shape
=
routeGraphic
.
getGeometry
();
arcGisLocationView
.
mMapView
.
setViewpointGeometryAsync
(
shape
,
100
);
initNaviTipView
();
initTTS
();
initE
();
}
else
{
@Override
arcGisSearchView
.
disDialog
();
public
void
onInitFailed
(
String
msg
)
{
Toast
.
makeText
(
mContext
,
"路线规划失败"
,
Toast
.
LENGTH_LONG
).
show
();
//SDK初始化失败
Toast
.
makeText
(
mContext
,
msg
,
Toast
.
LENGTH_LONG
).
show
();
}
}
}
else
{
});
arcGisSearchView
.
disDialog
();
}
else
{
Toast
.
makeText
(
mContext
,
"路线规划失败"
,
Toast
.
LENGTH_LONG
).
show
();
Toast
.
makeText
(
mContext
,
"导航组件初始化失败,请重新启动"
,
Toast
.
LENGTH_LONG
).
show
();
}
}
});
}
}
}
}
;
private
void
initNaviTipView
()
{
if
(
naviTipView
==
null
)
{
naviTipView
=
inflate
(
mContext
,
R
.
layout
.
layout_navi_tip
,
null
);
naviIndicatorBand
=
naviTipView
.
findViewById
(
R
.
id
.
naviIndicatorBand
);
naviBigMagBand
=
naviTipView
.
findViewById
(
R
.
id
.
naviBigMagBand
);
trafficBarLayout
=
naviTipView
.
findViewById
(
R
.
id
.
trafficBarLayout
);
eyeBand
=
naviTipView
.
findViewById
(
R
.
id
.
eyeBand
);
eyeSpeed
=
naviTipView
.
findViewById
(
R
.
id
.
eyeSpeed
);
eyeImage
=
naviTipView
.
findViewById
(
R
.
id
.
eyeImage
);
naviLandBand
=
naviTipView
.
findViewById
(
R
.
id
.
naviLandBand
);
nowRoute
=
naviTipView
.
findViewById
(
R
.
id
.
nowRoute
);
speed
=
naviTipView
.
findViewById
(
R
.
id
.
speed
);
ll_navi_bottom_info_text
=
naviTipView
.
findViewById
(
R
.
id
.
ll_navi_bottom_info_text
);
naviSABand
=
naviTipView
.
findViewById
(
R
.
id
.
naviSABand
);
addView
(
naviTipView
);
}
}
private
void
initTTS
()
{
@Override
if
(
ttsProvider
==
null
)
{
public
void
onClick
(
View
v
)
{
/**
if
(
arcGisLocationView
.
mMapView
.
getCallout
().
isShowing
())
{
* 获取TTS语音播报对象
arcGisLocationView
.
mLocationGraphicsOverlay
.
getGraphics
().
clear
();
*/
arcGisLocationView
.
mNaviGraphicsOverlay
.
getGraphics
().
clear
();
ttsProvider
=
TTSProvider
.
getInstance
();
arcGisLocationView
.
mMapView
.
getCallout
().
dismiss
();
/**
* 初始化tts语音播报语音功能
*/
ttsProvider
.
init
(
mContext
);
}
}
}
private
void
initE
()
{
if
(
mineNaviGuide
==
null
)
{
mineNaviGuide
=
MineNaviGuide
.
getInstance
();
mineNaviGuide
.
init
(
mContext
);
//如需特殊设置,请按此修改。
//导航设置Options
GidOption
gidOption
=
new
GidOption
();
/**
* 设置放大图初始化大小
*
* @param width 宽 单位:像素
* @param height 高 单位:像素
*/
gidOption
.
setDFMSize
(
1000
,
400
);
/**
* 更改车线板图片资源
* 如需更改将图片放到assets里。图片格式只能仿造,位置不能变化。
* @param fileName 文件名
*/
gidOption
.
setLaneResourcesName
(
"sprite2.png"
);
int
landWidth
=
DensityUtil
.
dip2px
(
mContext
,
38
f
);
int
lineColor
=
Color
.
parseColor
(
"#ff5453"
);
int
backColor
=
Color
.
parseColor
(
"#008B87"
);
int
lineWidth
=
1
;
int
hight
=
DensityUtil
.
dip2px
(
mContext
,
48
f
);
/**
* 设置车线板图片初始化属性
* @param backcolor 背景
* @param linecolor 分割线颜色
* @param landWidth 一条车线宽度 单位:像素
* @param lineWidth 分割线宽度 单位:像素
* @param hight 车线板高度
*/
gidOption
.
setLaneSetting
(
backColor
,
lineColor
,
landWidth
,
lineWidth
,
hight
);
/**
* 设置导航引导设置Options
*
* @param gidOption 导航引导设置Options
*/
mineNaviGuide
.
setGidOption
(
gidOption
);
/**
* 设置导航/模拟导航事件回调监听
*/
mineNaviGuide
.
setGuideEventListener
(
new
OnGuideEventListener
()
{
/**
* 返回导航/模拟导航的结果
* @param i 触发的事件类型
* @param o 触发的事件数据,如放大图,返回内容则是放大图类
*/
@Override
public
void
onGuideEvent
(
int
i
,
Object
o
)
{
switch
(
i
)
{
case
GidEvent
.
deleteArrow
:
Log
.
i
(
TAG
,
"删除三角"
);
break
;
case
GidEvent
.
newArrow
:
Log
.
i
(
TAG
,
"三角显示"
);
if
(
o
!=
null
)
{
showBottomInputPopupLayout
();
List
<
GeoPoint
>
gidArrow
=
(
List
<
GeoPoint
>)
o
;
if
(
gidArrow
.
size
()
>
0
)
{
Log
.
e
(
TAG
,
"三角显示"
+
gidArrow
.
size
());
}
}
break
;
case
GidEvent
.
destArrived
:
Log
.
i
(
TAG
,
"到达目的地"
);
showAllView
();
bottomView
.
setVisibility
(
VISIBLE
);
naviTipView
.
setVisibility
(
GONE
);
arcGisLocationView
.
mRouteMarkerGraphicsOverlay
.
getGraphics
().
clear
();
arcGisLocationView
.
mMapView
.
setViewpointScaleAsync
(
mapScanleValue
);
if
(
mineNaviGuide
!=
null
)
{
mineNaviGuide
.
stopGuide
();
mineNaviGuide
.
stopDemo
();
}
break
;
case
GidEvent
.
expandViewHide
:
Log
.
i
(
TAG
,
"放大图隐藏"
);
hintNaviBigMag
();
break
;
case
GidEvent
.
expandViewShow
:
Log
.
i
(
TAG
,
"放大图显示"
);
if
(
o
!=
null
)
{
Bitmap
mBitmap
=
null
;
int
maxDist
=
0
;
int
restDist
=
0
;
String
title
=
""
;
int
dir
=
0
;
//绘制路口放大图
try
{
GidDFM
gidMag
=
(
GidDFM
)
o
;
maxDist
=
gidMag
.
getMaxDist
();
//扩大图显示距离
restDist
=
gidMag
.
getRestDist
();
//扩大图剩余距离
title
=
gidMag
.
title
;
//扩大图标题
mBitmap
=
gidMag
.
dfmBmp
;
//获取下转向方向
GidPoint
simpleGidPoint
=
mineNaviGuide
.
getSimpleGidPoint
();
if
(
simpleGidPoint
!=
null
)
{
//方向
dir
=
simpleGidPoint
.
dir
;
title
=
simpleGidPoint
.
name
;
}
}
catch
(
Exception
e
)
{
mBitmap
=
null
;
}
// 没有路口放大图时显示mOnlineExpandLayout里面的导航信息
if
(
mBitmap
!=
null
)
{
naviBigMagBand
.
setImageBitmap
(
mBitmap
);
naviBigMagBand
.
setInfoImage
(
dir
);
naviBigMagBand
.
setNaviTitleTextView
(
title
);
naviBigMagBand
.
setProgress
(
maxDist
-
restDist
,
maxDist
);
naviBigMagBand
.
setNaviTextView
(
FormatUtil
.
FormatDist
(
restDist
)
+
"后"
);
showNaviBigMag
();
hintTrafficBar
();
}
else
{
hintNaviBigMag
();
showTrafficBar
();
}
}
break
;
case
GidEvent
.
eyeHide
:
Log
.
i
(
TAG
,
"电子眼隐藏"
);
if
(
o
!=
null
)
{
GidCamera
gidEye
=
(
GidCamera
)
o
;
Log
.
i
(
TAG
,
"电子眼隐藏"
+
gidEye
.
toString
());
eyeBand
.
setVisibility
(
View
.
GONE
);
}
break
;
case
GidEvent
.
eyeShow
:
if
(
o
!=
null
)
{
GidCamera
gidEye
=
(
GidCamera
)
o
;
Log
.
i
(
TAG
,
"电子眼显示"
);
eyeBand
.
setVisibility
(
View
.
VISIBLE
);
showEyeBand
(
gidEye
.
getKind
(),
gidEye
.
getLimitSpeed
());
}
break
;
case
GidEvent
.
naviBegin
:
Log
.
i
(
TAG
,
"导航开始"
);
ttsProvider
.
startSpeak
(
"导航开始"
);
startNavi
();
break
;
case
GidEvent
.
naviLaneHide
:
Log
.
i
(
TAG
,
"车线板隐藏"
);
naviLandBand
.
setVisibility
(
View
.
GONE
);
break
;
case
GidEvent
.
naviLaneShow
:
Log
.
i
(
TAG
,
"车线板显示"
);
if
(
o
!=
null
)
{
GidLane
gidLane
=
(
GidLane
)
o
;
updateGidLand
(
gidLane
);
}
break
;
case
GidEvent
.
newRoadName
:
Log
.
i
(
TAG
,
"新路名"
);
if
(
o
!=
null
)
{
String
roadName
=
(
String
)
o
;
if
(!
TextUtils
.
isEmpty
(
roadName
)
&&
!
roadName
.
equals
(
"无名路"
))
{
nowRoute
.
setText
(
roadName
);
nowRoute
.
setVisibility
(
View
.
VISIBLE
);
}
else
{
nowRoute
.
setVisibility
(
View
.
GONE
);
}
}
break
;
case
GidEvent
.
tracking
:
GidMatchRes
matchRes
=
null
;
if
(
o
!=
null
)
{
matchRes
=
(
GidMatchRes
)
o
;
speed
.
setText
(
String
.
valueOf
(
matchRes
.
speed
));
}
GidPoint
simpleGidPoint
=
mineNaviGuide
.
getSimpleGidPoint
();
if
(
simpleGidPoint
!=
null
)
{
naviIndicatorBand
.
setGpsAccuracyHigh
(
true
);
naviIndicatorBand
.
setNaviAddressTextView
(
simpleGidPoint
.
name
);
naviIndicatorBand
.
setNaviMarkSrc
(
simpleGidPoint
.
type
,
simpleGidPoint
.
dir
);
naviIndicatorBand
.
setNaviSpaceTextView
(
FormatUtil
.
FormatDist
(
simpleGidPoint
.
distance
)
+
"后"
);
}
GidRemain
remain
=
mineNaviGuide
.
getRemain
();
if
(
remain
!=
null
)
{
int
timeETA
=
remain
.
time
;
int
disLast
=
remain
.
dist
;
showNavifootBandInfo
(
timeETA
,
disLast
);
}
showServiceArea
();
if
(
simpleGidPoint
!=
null
)
{
Log
.
i
(
TAG
,
"====GPS回调经纬度======="
+
simpleGidPoint
.
pos
.
getLatitude
()
+
","
+
simpleGidPoint
.
pos
.
getLongitude
());
}
arcGisLocationView
.
mRouteMarkerGraphicsOverlay
.
getGraphics
().
clear
();
if
(
matchRes
!=
null
)
{
double
[]
pointArr
=
GpsUtil
.
toWGS84Point
(
matchRes
.
pos
.
getLatitude
(),
matchRes
.
pos
.
getLongitude
());
Point
point
=
new
Point
(
pointArr
[
1
],
pointArr
[
0
],
SpatialReference
.
create
(
4326
));
try
{
BitmapDrawable
bitmapDrawableNormal
=
(
BitmapDrawable
)
ContextCompat
.
getDrawable
(
mContext
,
R
.
drawable
.
icon_route_text_start
);
PictureMarkerSymbol
destinationSymbolNormal
=
PictureMarkerSymbol
.
createAsync
(
bitmapDrawableNormal
).
get
();
if
(
matchRes
.
dir
<
0
)
{
matchRes
.
dir
+=
360
;
}
destinationSymbolNormal
.
setAngle
(-
matchRes
.
dir
);
arcGisLocationView
.
mRouteMarkerGraphicsOverlay
.
getGraphics
().
add
(
new
Graphic
(
point
,
destinationSymbolNormal
));
arcGisLocationView
.
mMapView
.
setViewpointCenterAsync
(
point
);
arcGisLocationView
.
mMapView
.
setViewpointScaleAsync
(
mapScanleValue
/
20
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
// if (matchRes != null) {
// setCarPostion(new LatLng(matchRes.pos.getLatitude(), matchRes.pos.getLongitude()), matchRes.dir, 16);
// }
break
;
case
GidEvent
.
sound
:
if
(
o
!=
null
)
{
String
sound
=
(
String
)
o
;
Log
.
i
(
TAG
,
"声音:"
+
sound
);
}
break
;
case
GidEvent
.
tmcUpdated
:
Log
.
i
(
TAG
,
"路况变化"
);
List
<
JamPath
>
gidCusPosList
=
mineNaviGuide
.
getGidCusPosList
();
if
(
gidCusPosList
!=
null
&&
gidCusPosList
.
size
()
>
0
)
{
Log
.
i
(
TAG
,
"路况变化:"
+
gidCusPosList
.
toString
());
}
GidRemain
remains
=
mineNaviGuide
.
getRemain
();
if
(
remains
!=
null
)
{
Log
.
i
(
TAG
,
"路况变化:"
+
remains
.
toString
());
}
break
;
case
GidEvent
.
rerouteComplete
:
Log
.
i
(
TAG
,
"重新规划完成"
);
List
<
JamPath
>
gidCusPosLists
=
mineNaviGuide
.
getGidCusPosList
();
if
(
gidCusPosLists
!=
null
&&
gidCusPosLists
.
size
()
>
0
)
{
Log
.
i
(
TAG
,
"重新规划完成:"
+
gidCusPosLists
.
toString
());
}
GidRemain
remainss
=
mineNaviGuide
.
getRemain
();
if
(
remainss
!=
null
)
{
Log
.
i
(
TAG
,
"重新规划完成"
+
remainss
.
toString
());
}
break
;
case
GidEvent
.
rerouteFailed
:
Log
.
i
(
TAG
,
"重新规划失败"
);
break
;
}
}
});
}
}
}
private
void
showNaviBigMag
()
{
@Override
naviBigMagBand
.
setVisibility
(
View
.
VISIBLE
);
public
void
selectedResult
(
SearchModel
searchModel
)
{
naviIndicatorBand
.
setVisibility
(
View
.
GONE
);
arcGisSearchView
.
mSearchEt
.
setText
(
""
);
}
arcGisSearchView
.
setVisibility
(
View
.
GONE
);
arcGisLocationView
.
mLocationGraphicsOverlay
.
getGraphics
().
clear
();
arcGisLocationView
.
mNaviGraphicsOverlay
.
getGraphics
().
clear
();
arcGisLocationView
.
mMapView
.
getCallout
().
dismiss
();
if
(
isSelectStartAddress
)
{
startSearchModel
=
searchModel
;
startAddressTv
.
setText
(
startSearchModel
.
getPoiname
());
arcGisLocationView
.
setSearchLocation
(
startSearchModel
.
getX
(),
startSearchModel
.
getY
(),
Variable
.
SearchType
.
START_ADDRESS_SEARCH
);
//这样写是因为会把地图上的所有点全部去除,重新绘制起点和终点
if
(
endSearchModel
!=
null
)
{
arcGisLocationView
.
setSearchLocation
(
endSearchModel
.
getX
(),
endSearchModel
.
getY
(),
Variable
.
SearchType
.
END_ADDRESS_SEARCH
);
}
}
else
{
endSearchModel
=
searchModel
;
endAddressTv
.
setText
(
endSearchModel
.
getPoiname
());
//这样写是因为会把地图上的所有点全部去除,重新绘制起点和终点
arcGisLocationView
.
setSearchLocation
(
startSearchModel
.
getX
(),
startSearchModel
.
getY
(),
Variable
.
SearchType
.
START_ADDRESS_SEARCH
);
arcGisLocationView
.
setSearchLocation
(
endSearchModel
.
getX
(),
endSearchModel
.
getY
(),
Variable
.
SearchType
.
END_ADDRESS_SEARCH
);
}
if
(
mapScanleValue
!=
arcGisLocationView
.
mMapView
.
getMapScale
())
{
arcGisLocationView
.
mMapView
.
setViewpointScaleAsync
(
mapScanleValue
);
}
private
void
hintNaviBigMag
()
{
bottomInputPopupLayout
.
show
();
naviBigMagBand
.
setVisibility
(
View
.
GONE
);
naviIndicatorBand
.
setVisibility
(
View
.
VISIBLE
);
}
private
void
showTrafficBar
()
{
trafficBarLayout
.
setVisibility
(
View
.
VISIBLE
);
}
}
private
void
hintTrafficBar
()
{
private
void
showDialog
()
{
trafficBarLayout
.
setVisibility
(
View
.
GONE
);
showDialog
(
"正在加载..."
);
}
}
/**
* 判断显示电子眼图标
*
* @param kind
* @param limitSpeed
*/
private
void
showEyeBand
(
int
kind
,
int
limitSpeed
)
{
switch
(
kind
)
{
//治安监控,监控拍照(交通遵守路段),隧道内监控
case
GidCamera
.
GEType
.
GE_EYE_MONITOR
|
GidCamera
.
GEType
.
GE_EYE_REGULAR
|
GidCamera
.
GEType
.
GE_EYE_CHANNEL
:
eyeSpeed
.
setVisibility
(
View
.
GONE
);
eyeImage
.
setVisibility
(
View
.
VISIBLE
);
eyeImage
.
setImageResource
(
R
.
drawable
.
icon_eye_monitor_big
);
break
;
case
GidCamera
.
GEType
.
GE_EYE_RED_LIGHT
:
//闯红灯
eyeSpeed
.
setVisibility
(
View
.
GONE
);
eyeImage
.
setVisibility
(
View
.
VISIBLE
);
eyeImage
.
setImageResource
(
R
.
drawable
.
icon_eye_light_big
);
break
;
case
GidCamera
.
GEType
.
GE_EYE_SPEED_LIMIT
:
//限速
eyeSpeed
.
setVisibility
(
View
.
VISIBLE
);
eyeImage
.
setVisibility
(
View
.
GONE
);
eyeSpeed
.
setText
(
limitSpeed
+
""
);
break
;
default
:
eyeSpeed
.
setVisibility
(
View
.
GONE
);
eyeImage
.
setVisibility
(
View
.
VISIBLE
);
eyeImage
.
setImageResource
(
R
.
drawable
.
icon_eye_monitor_big
);
break
;
}
}
private
void
updateGidLand
(
GidLane
gidLane
)
{
private
void
showDialog
(
String
tipMsg
)
{
try
{
try
{
if
(
gidLane
!=
null
&&
gidLane
.
getLaneBitmap
()
!=
null
)
{
if
(
myDialog
!=
null
&&
myDialog
.
isShowing
())
{
naviLandBand
.
setImageBitmap
(
gidLane
.
getLaneBitmap
());
myDialog
.
dismiss
();
naviLandBand
.
setVisibility
(
View
.
VISIBLE
);
}
else
{
naviLandBand
.
setVisibility
(
View
.
GONE
);
}
}
myDialog
=
new
ProgressDialog
(
mContext
);
//当前有一条车线有效,道路所有车线大于1条,6条以上车线不显示 占地方.
myDialog
.
setProgressStyle
(
ProgressDialog
.
STYLE_SPINNER
);
// if (gidLane != null &&gidLane.getBackgroundLane().length > 1 && gidLane.getBackgroundLane().length < 7) {
myDialog
.
setMessage
(
tipMsg
);
// naviLandBand.setImageBitmap(gidLane.getLaneBitmap());
myDialog
.
setIndeterminate
(
false
);
// naviLandBand.setVisibility(View.VISIBLE);
myDialog
.
setCancelable
(
false
);
// } else {
myDialog
.
show
();
// //所有数据都是false 不显示
// naviLandBand.setVisibility(View.GONE);
// }
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
}
/**
/**
* 导航底板信息显示
* 关闭
*
* @param timeETA 剩余时间 单位:毫秒
* @param disLast 剩余距离 单位:米
*/
*/
private
void
showNavifootBandInfo
(
long
timeETA
,
long
disLast
)
{
private
void
disDialog
()
{
String
disStr
=
"剩余"
+
FormatUtil
.
FormatDistByKM
(
disLast
)
+
"公里"
;
try
{
String
timeStr
=
FormatUtil
.
FormatTime3
(
timeETA
);
if
(
myDialog
!=
null
&&
myDialog
.
isShowing
())
{
long
time
=
System
.
currentTimeMillis
();
myDialog
.
dismiss
();
long
endTime
=
timeETA
+
time
;
Date
date
=
new
Date
(
endTime
);
@SuppressLint
(
"SimpleDateFormat"
)
SimpleDateFormat
format
=
new
SimpleDateFormat
(
"HH:mm"
);
ll_navi_bottom_info_text
.
setNaviContent
(
"$disStr $timeStr"
,
format
.
format
(
date
)
+
"到达"
);
}
private
void
showServiceArea
()
{
List
<
GidPoint
>
saList
=
mineNaviGuide
.
getSAGidPoint
();
if
(
saList
!=
null
&&
saList
.
size
()
>
0
)
{
if
(
naviSABand
.
getVisibility
()
==
View
.
GONE
)
{
naviSABand
.
setVisibility
(
View
.
VISIBLE
);
}
//第一个服务区
if
(
saList
.
size
()
>=
1
)
{
GidPoint
gidPoint1
=
saList
.
get
(
0
);
String
sidStr
=
FormatUtil
.
FormatDistOnKM
(
gidPoint1
.
distance
);
String
nameStr
=
gidPoint1
.
name
.
replace
(
"服务区"
,
""
);
if
(
TextUtils
.
isEmpty
(
nameStr
))
{
nameStr
=
"服务区"
;
}
naviSABand
.
setDis1TextView
(
sidStr
);
naviSABand
.
setSa1NameTextView
(
nameStr
);
}
//第二个服务区
if
(
saList
.
size
()
>=
2
)
{
GidPoint
gidPoint2
=
saList
.
get
(
1
);
String
sidStr
=
FormatUtil
.
FormatDistOnKM
(
gidPoint2
.
distance
);
naviSABand
.
setDis2TextView
(
sidStr
);
naviSABand
.
setSa2Show
();
}
else
{
naviSABand
.
setSa2hite
();
}
}
else
{
if
(
naviSABand
.
getVisibility
()
==
View
.
VISIBLE
)
{
naviSABand
.
setVisibility
(
View
.
GONE
);
}
}
myDialog
=
null
;
}
catch
(
Exception
e
)
{
}
}
}
}
...
@@ -899,9 +607,9 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
...
@@ -899,9 +607,9 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
*/
*/
public
void
setShowNaviLayout
(
boolean
isShow
)
{
public
void
setShowNaviLayout
(
boolean
isShow
)
{
if
(
isShow
)
{
if
(
isShow
)
{
mNavi
TotalLayout
.
setVisibility
(
VISIBLE
);
mNavi
Iv
.
setVisibility
(
VISIBLE
);
}
else
{
}
else
{
mNavi
TotalLayout
.
setVisibility
(
GONE
);
mNavi
Iv
.
setVisibility
(
GONE
);
}
}
}
}
...
@@ -909,32 +617,36 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
...
@@ -909,32 +617,36 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
* @param location {@link Variable.ViewLocation } NaviView显示位置
* @param location {@link Variable.ViewLocation } NaviView显示位置
*/
*/
public
void
setNaviViewLocation
(
Variable
.
ViewLocation
location
)
{
public
void
setNaviViewLocation
(
Variable
.
ViewLocation
location
)
{
RelativeLayout
.
LayoutParams
params
=
(
RelativeLayout
.
LayoutParams
)
mNaviIv
.
getLayoutParams
();
switch
(
location
)
{
switch
(
location
)
{
case
LEFT_TOP:
case
LEFT_TOP:
mNaviTotalLayout
.
setGravity
(
Gravity
.
LEFT
|
Gravity
.
TOP
);
params
.
addRule
(
RelativeLayout
.
ALIGN_PARENT_LEFT
|
RelativeLayout
.
ALIGN_PARENT_
TOP
);
break
;
break
;
case
RIGHT_TOP:
case
RIGHT_TOP:
mNaviTotalLayout
.
setGravity
(
Gravity
.
RIGHT
|
Gravity
.
TOP
);
params
.
addRule
(
RelativeLayout
.
ALIGN_PARENT_RIGHT
|
RelativeLayout
.
ALIGN_PARENT_
TOP
);
break
;
break
;
case
CENTER:
case
CENTER:
mNaviTotalLayout
.
setGravity
(
Gravity
.
CENTER
);
params
.
addRule
(
RelativeLayout
.
CENTER_IN_PARENT
);
break
;
break
;
case
LEFT_BOTTOM:
case
LEFT_BOTTOM:
mNaviTotalLayout
.
setGravity
(
Gravity
.
LEFT
|
Gravity
.
BOTTOM
);
params
.
addRule
(
RelativeLayout
.
ALIGN_PARENT_LEFT
|
RelativeLayout
.
ALIGN_PARENT_
BOTTOM
);
break
;
break
;
case
RIGHT_BOTTOM:
case
RIGHT_BOTTOM:
mNaviTotalLayout
.
setGravity
(
Gravity
.
RIGHT
|
Gravity
.
BOTTOM
);
params
.
addRule
(
RelativeLayout
.
ALIGN_PARENT_RIGHT
|
RelativeLayout
.
ALIGN_PARENT_
BOTTOM
);
break
;
break
;
}
}
mNaviIv
.
setLayoutParams
(
params
);
}
}
/**
/**
* @param naviImage int(资源ID)-导航图片
* @param naviImage int(资源ID)-导航图片
*/
*/
public
void
setNaviImage
(
int
naviImage
)
{
public
void
setNaviImage
(
int
naviImage
)
{
mNaviIv
.
setImageDrawable
(
getResources
().
getDrawable
(
naviImage
));
mNaviIv
.
setImageDrawable
(
mContext
.
getResources
().
getDrawable
(
naviImage
));
}
}
/**
/**
* 自定义点开始导航
* 自定义点开始导航
*
*
...
@@ -943,65 +655,49 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
...
@@ -943,65 +655,49 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
* new PointModel(113.6242709,22.8810121,"新丽佳百货"),new PointModel(113.6351135,22.8874085,"大自然花场")
* new PointModel(113.6242709,22.8810121,"新丽佳百货"),new PointModel(113.6351135,22.8874085,"大自然花场")
*/
*/
public
void
setCustomPointNavi
(
PointModel
startPoint
,
PointModel
endPoint
)
{
public
void
setCustomPointNavi
(
PointModel
startPoint
,
PointModel
endPoint
)
{
if
(
startPoint
==
null
)
{
calcNaviDriveRoute
(
startPoint
,
endPoint
);
Toast
.
makeText
(
mContext
,
"请设置起点"
,
Toast
.
LENGTH_LONG
).
show
();
}
return
;
}
if
(
endPoint
==
null
)
{
Toast
.
makeText
(
mContext
,
"请设置终点"
,
Toast
.
LENGTH_LONG
).
show
();
/**
return
;
* 底部输入popup
*/
private
void
showBottomInputPopupLayout
()
{
if
(
bottomInputParentView
==
null
)
{
bottomInputParentView
=
View
.
inflate
(
mContext
,
R
.
layout
.
layout_navi_input
,
null
);
initBottomInputView
();
bottomInputPopupLayout
=
new
PopupLayout
(
mContext
,
bottomInputParentView
);
bottomInputPopupLayout
.
setUseRadius
(
true
);
}
}
setCustomPointNaviRoute
(
startPoint
,
endPoint
);
bottomInputPopupLayout
.
show
(
PopupLayout
.
POSITION_BOTTOM
);
}
bottomInputPopupLayout
.
setDismissListener
(()
->
{
if
(
routeInfoList
.
size
()
>
0
&&
bottomNaviParentView
!=
null
)
{
bottomNaviParentView
.
setVisibility
(
View
.
VISIBLE
);
}
});
@Override
if
(
bottomNaviParentView
!=
null
)
{
public
void
onClick
(
View
view
)
{
bottomNaviParentView
.
setVisibility
(
View
.
GONE
);
if
(
arcGisLocationView
.
mMapView
.
getCallout
().
isShowing
())
{
arcGisLocationView
.
mLocationGraphicsOverlay
.
getGraphics
().
clear
();
arcGisLocationView
.
mNaviGraphicsOverlay
.
getGraphics
().
clear
();
arcGisLocationView
.
mMapView
.
getCallout
().
dismiss
();
}
}
setPopupLayout
();
}
}
private
void
setPopupLayout
()
{
if
(
bottomNaviParentView
==
null
)
{
bottomNaviParentView
=
View
.
inflate
(
mContext
,
R
.
layout
.
layout_navi_input
,
null
);
initBottomView
();
popupLayout
=
new
PopupLayout
(
mContext
,
bottomNaviParentView
);
popupLayout
.
setUseRadius
(
true
);
popupLayout
.
setHeight
((
int
)
(
ToolUtil
.
getScreenHeight
(
mContext
)
*
0.35
),
false
);
}
popupLayout
.
show
(
PopupLayout
.
POSITION_BOTTOM
);
popupLayout
.
setDismissListener
(()
->
{
if
(
routeInfoList
.
size
()
>
0
&&
bottomView
!=
null
)
{
bottomView
.
setVisibility
(
View
.
VISIBLE
);
}
});
if
(
bottomView
!=
null
)
{
/**
bottomView
.
setVisibility
(
View
.
GONE
);
* 初始化底部输入view
}
*/
private
void
initBottomInputView
()
{
}
ImageView
closeIv
=
bottomInputParentView
.
findViewById
(
R
.
id
.
navi_close_iv
);
RelativeLayout
startRl
=
bottomInputParentView
.
findViewById
(
R
.
id
.
navi_start_rl
);
private
void
initBottomView
()
{
startAddressTv
=
bottomInputParentView
.
findViewById
(
R
.
id
.
navi_start_address_tv
);
ImageView
closeIv
=
bottomNaviParentView
.
findViewById
(
R
.
id
.
navi_close_iv
);
RelativeLayout
endRl
=
bottomInputParentView
.
findViewById
(
R
.
id
.
navi_end_rl
);
RelativeLayout
startRl
=
bottomNaviParentView
.
findViewById
(
R
.
id
.
navi_start_rl
);
endAddressTv
=
bottomInputParentView
.
findViewById
(
R
.
id
.
navi_end_address_tv
);
startAddressTv
=
bottomNaviParentView
.
findViewById
(
R
.
id
.
navi_start_address_tv
);
TextView
finishTv
=
bottomInputParentView
.
findViewById
(
R
.
id
.
navi_finish_tv
);
RelativeLayout
endRl
=
bottomNaviParentView
.
findViewById
(
R
.
id
.
navi_end_rl
);
endAddressTv
=
bottomNaviParentView
.
findViewById
(
R
.
id
.
navi_end_address_tv
);
TextView
finishTv
=
bottomNaviParentView
.
findViewById
(
R
.
id
.
navi_finish_tv
);
startAddressTv
.
setOnClickListener
(
view
->
{
startAddressTv
.
setOnClickListener
(
view
->
{
p
opupLayout
.
dismiss
();
bottomInputP
opupLayout
.
dismiss
();
isSelectStartAddress
=
true
;
isSelectStartAddress
=
true
;
arcGisSearchView
.
currSearchType
=
Variable
.
SearchType
.
START_ADDRESS_SEARCH
;
arcGisSearchView
.
currSearchType
=
Variable
.
SearchType
.
START_ADDRESS_SEARCH
;
arcGisSearchView
.
setVisibility
(
View
.
VISIBLE
);
arcGisSearchView
.
setVisibility
(
View
.
VISIBLE
);
...
@@ -1016,7 +712,7 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
...
@@ -1016,7 +712,7 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
return
;
return
;
}
}
p
opupLayout
.
dismiss
();
bottomInputP
opupLayout
.
dismiss
();
isSelectStartAddress
=
false
;
isSelectStartAddress
=
false
;
arcGisSearchView
.
currSearchType
=
Variable
.
SearchType
.
END_ADDRESS_SEARCH
;
arcGisSearchView
.
currSearchType
=
Variable
.
SearchType
.
END_ADDRESS_SEARCH
;
arcGisSearchView
.
setVisibility
(
View
.
VISIBLE
);
arcGisSearchView
.
setVisibility
(
View
.
VISIBLE
);
...
@@ -1026,12 +722,8 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
...
@@ -1026,12 +722,8 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
closeIv
.
setOnClickListener
(
view
->
{
closeIv
.
setOnClickListener
(
view
->
{
popupLayout
.
dismiss
();
bottomInputPopupLayout
.
dismiss
();
arcGisSearchView
.
currSearchType
=
Variable
.
SearchType
.
SEARCH
;
showAllView
();
arcGisLocationView
.
currSearchType
=
Variable
.
SearchType
.
NONE
;
arcGisLocationView
.
mLocationGraphicsOverlay
.
getGraphics
().
clear
();
arcGisLocationView
.
mNaviGraphicsOverlay
.
getGraphics
().
clear
();
arcGisLocationView
.
mMapView
.
getCallout
().
dismiss
();
});
});
finishTv
.
setOnClickListener
(
view
->
{
finishTv
.
setOnClickListener
(
view
->
{
String
startStr
=
startAddressTv
.
getText
().
toString
().
trim
();
String
startStr
=
startAddressTv
.
getText
().
toString
().
trim
();
...
@@ -1047,176 +739,245 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
...
@@ -1047,176 +739,245 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
return
;
return
;
}
}
if
(
startSearchModel
.
getY
()
==
endSearchModel
.
getY
()
&&
startSearchModel
.
getX
()
==
endSearchModel
.
getX
())
{
PointModel
startPoint
=
new
PointModel
(
startSearchModel
.
getX
(),
startSearchModel
.
getY
(),
startSearchModel
.
getPoiname
());
Toast
.
makeText
(
mContext
,
"出发地和目的地不能是同一地址"
,
Toast
.
LENGTH_LONG
).
show
();
PointModel
endPoint
=
new
PointModel
(
endSearchModel
.
getX
(),
endSearchModel
.
getY
(),
endSearchModel
.
getPoiname
());
return
;
}
setDefaultSearchNaviRoute
();
});
}
private
void
setDefaultSearchNaviRoute
()
{
arcGisLocationView
.
mNaviGraphicsOverlay
.
getGraphics
().
clear
();
calcNaviDriveRoute
(
startPoint
,
endPoint
);
arcGisLocationView
.
setSearchLocation
(
startSearchModel
.
getX
(),
startSearchModel
.
getY
(),
Variable
.
SearchType
.
START_ADDRESS_SEARCH
);
arcGisLocationView
.
setSearchLocation
(
endSearchModel
.
getX
(),
endSearchModel
.
getY
(),
Variable
.
SearchType
.
END_ADDRESS_SEARCH
);
Log
.
e
(
"startPoint"
,
startSearchModel
.
getX
()
+
","
+
startSearchModel
.
getY
()
+
","
+
startSearchModel
.
getPoiname
());
Log
.
e
(
"endPoint"
,
endSearchModel
.
getX
()
+
","
+
endSearchModel
.
getY
()
+
","
+
endSearchModel
.
getPoiname
());
PlanPoint
startPoint
=
new
PlanPoint
();
startPoint
.
name
=
startSearchModel
.
getPoiname
();
double
[]
startPointArr
=
GpsUtil
.
toGCJ02Point
(
startSearchModel
.
getY
(),
startSearchModel
.
getX
());
startPoint
.
pos
=
new
GeoPoint
(
startPointArr
[
0
],
startPointArr
[
1
]);
// startPoint.pos = new GeoPoint(23.014546,113.741829);
startPoint
.
idx
=
0
;
PlanPoint
endPoint
=
new
PlanPoint
();
endPoint
.
name
=
endSearchModel
.
getPoiname
();
double
[]
endPointArr
=
GpsUtil
.
toGCJ02Point
(
endSearchModel
.
getY
(),
endSearchModel
.
getX
());
endPoint
.
pos
=
new
GeoPoint
(
endPointArr
[
0
],
endPointArr
[
1
]);
// endPoint.pos = new GeoPoint(22.970898,114.047684);
endPoint
.
idx
=
PlanPoint
.
VIA1_IDX
;
/**
});
* 设置开始点
*
* @param originPoint 开始点
* @return 设置成功还是失败
*/
mineNaviRoute
.
setOrigin
(
startPoint
);
/**
* 设置目的地
*
* @param destPoint 目的地
* @return 设置成功还是失败
*/
mineNaviRoute
.
setDestination
(
endPoint
);
mineNaviRoute
.
calcDriveRoute
();
arcGisSearchView
.
showDialog
();
}
}
/**
/**
*
自定义点开启导航
*
计算驾车路线
*
*
* @param startPoint
起
点
* @param startPoint
开始
点
* @param endPoint
终
点
* @param endPoint
结束
点
*/
*/
private
void
setCustomPointNaviRoute
(
PointModel
startPoint
,
PointModel
endPoint
)
{
private
void
calcNaviDriveRoute
(
PointModel
startPoint
,
PointModel
endPoint
)
{
arcGisLocationView
.
mLocationGraphicsOverlay
.
getGraphics
().
clear
();
arcGisLocationView
.
mNaviGraphicsOverlay
.
getGraphics
().
clear
();
arcGisLocationView
.
mMapView
.
getCallout
().
dismiss
();
if
(
mapScanleValue
!=
arcGisLocationView
.
mMapView
.
getMapScale
())
{
if
(
startPoint
==
null
||
endPoint
==
null
)
{
arcGisLocationView
.
mMapView
.
setViewpointScaleAsync
(
mapScanleValue
);
Toast
.
makeText
(
mContext
,
"请设置地点"
,
Toast
.
LENGTH_LONG
).
show
();
return
;
}
}
arcGisLocationView
.
setSearchLocation
(
startPoint
.
getxPoint
(),
startPoint
.
getyPoint
(),
Variable
.
SearchType
.
START_ADDRESS_SEARCH
);
if
(
startPoint
.
getyPoint
()
==
endPoint
.
getyPoint
()
&&
startPoint
.
getxPoint
()
==
endPoint
.
getxPoint
())
{
arcGisLocationView
.
setSearchLocation
(
endPoint
.
getxPoint
(),
endPoint
.
getyPoint
(),
Variable
.
SearchType
.
END_ADDRESS_SEARCH
);
Toast
.
makeText
(
mContext
,
"出发地和目的地不能是同一地址"
,
Toast
.
LENGTH_LONG
).
show
();
return
;
PlanPoint
startPlantPoint
=
new
PlanPoint
();
}
startPlantPoint
.
name
=
startPoint
.
getPointName
();
//互联网
// double[] startPointArr = GpsUtil.toGCJ02Point(startPoint.getyPoint(), startPoint.getxPoint());
// startPlantPoint.pos = new GeoPoint(startPointArr[0], startPointArr[1]);
//公安网
startPlantPoint
.
pos
=
new
GeoPoint
(
startPoint
.
getyPoint
(),
startPoint
.
getxPoint
());
startPlantPoint
.
idx
=
0
;
PlanPoint
endPlantPoint
=
new
PlanPoint
();
endPlantPoint
.
name
=
endPoint
.
getPointName
();
// double[] endPointArr = GpsUtil.toGCJ02Point(endPoint.getyPoint(), endPoint.getxPoint());
// endPlantPoint.pos = new GeoPoint(endPointArr[0], endPointArr[1]);
endPlantPoint
.
pos
=
new
GeoPoint
(
endPoint
.
getyPoint
(),
endPoint
.
getxPoint
());
endPlantPoint
.
idx
=
PlanPoint
.
VIA1_IDX
;
/**
tempStartPoint
=
startPoint
;
* 设置开始点
tempEndPoint
=
endPoint
;
*
* @param originPoint 开始点
* @return 设置成功还是失败
*/
mineNaviRoute
.
setOrigin
(
startPlantPoint
);
/**
* 设置目的地
*
* @param destPoint 目的地
* @return 设置成功还是失败
*/
mineNaviRoute
.
setDestination
(
endPlantPoint
);
mineNaviRoute
.
calcDriveRoute
();
if
(
mNaviSession
==
null
)
{
// initStoragePermission();
return
;
}
showDialog
(
"路线规划中..."
);
if
(
mapScanleValue
!=
arcGisLocationView
.
mMapView
.
getMapScale
())
{
arcGisLocationView
.
mMapView
.
setViewpointScaleAsync
(
mapScanleValue
);
}
}
@Override
public
void
selectedResult
(
SearchModel
searchModel
)
{
arcGisSearchView
.
mSearchEt
.
setText
(
""
);
arcGisSearchView
.
setVisibility
(
View
.
GONE
);
arcGisLocationView
.
mLocationGraphicsOverlay
.
getGraphics
().
clear
();
arcGisLocationView
.
mLocationGraphicsOverlay
.
getGraphics
().
clear
();
arcGisLocationView
.
mNaviGraphicsOverlay
.
getGraphics
().
clear
();
if
(
arcGisLocationView
.
mManualGraphicsOverlay
!=
null
)
{
arcGisLocationView
.
mMapView
.
getCallout
().
dismiss
();
if
(
arcGisLocationView
.
mManualGraphicsOverlay
.
getGraphics
()
!=
null
)
{
if
(
isSelectStartAddress
)
{
arcGisLocationView
.
mManualGraphicsOverlay
.
getGraphics
().
clear
();
startSearchModel
=
searchModel
;
startAddressTv
.
setText
(
startSearchModel
.
getPoiname
());
arcGisLocationView
.
setSearchLocation
(
startSearchModel
.
getX
(),
startSearchModel
.
getY
(),
Variable
.
SearchType
.
START_ADDRESS_SEARCH
);
//这样写是因为会把地图上的所有点全部去除,重新绘制起点和终点
if
(
endSearchModel
!=
null
)
{
arcGisLocationView
.
setSearchLocation
(
endSearchModel
.
getX
(),
endSearchModel
.
getY
(),
Variable
.
SearchType
.
END_ADDRESS_SEARCH
);
}
}
}
else
{
endSearchModel
=
searchModel
;
endAddressTv
.
setText
(
endSearchModel
.
getPoiname
());
//这样写是因为会把地图上的所有点全部去除,重新绘制起点和终点
arcGisLocationView
.
setSearchLocation
(
startSearchModel
.
getX
(),
startSearchModel
.
getY
(),
Variable
.
SearchType
.
START_ADDRESS_SEARCH
);
arcGisLocationView
.
setSearchLocation
(
endSearchModel
.
getX
(),
endSearchModel
.
getY
(),
Variable
.
SearchType
.
END_ADDRESS_SEARCH
);
}
}
if
(
mapScanleValue
!=
arcGisLocationView
.
mMapView
.
getMapScale
())
{
arcGisLocationView
.
mMapView
.
setViewpointScaleAsync
(
mapScanleValue
);
arcGisLocationView
.
mNaviGraphicsOverlay
.
getGraphics
().
clear
();
arcGisLocationView
.
mRouteMarkerGraphicsOverlay
.
getGraphics
().
clear
();
arcGisLocationView
.
mMapView
.
getCallout
().
dismiss
();
pointHandler
.
sendEmptyMessage
(
0
);
List
<
PoiFavorite
>
wayPoints
=
new
ArrayList
<>();
if
(!
isInternetEnviron
)
{
//内网
mStartPoint
=
Tools
.
latLngToPoint
(
new
LatLng
(
startPoint
.
getyPoint
(),
startPoint
.
getxPoint
()));
mStartName
=
!
TextUtils
.
isEmpty
(
startPoint
.
getPointName
())
?
startPoint
.
getPointName
()
:
"未知名称"
;
mEndPoint
=
Tools
.
latLngToPoint
(
new
LatLng
(
endPoint
.
getyPoint
(),
endPoint
.
getxPoint
()));
mEndName
=
!
TextUtils
.
isEmpty
(
endPoint
.
getPointName
())
?
endPoint
.
getPointName
()
:
"未知名称"
;
}
else
{
//互联网环境
double
[]
startPointArr
=
GpsUtil
.
toGCJ02Point
(
startPoint
.
getyPoint
(),
startPoint
.
getxPoint
());
mStartPoint
=
Tools
.
latLngToPoint
(
new
LatLng
(
startPointArr
[
0
],
startPointArr
[
1
]));
mStartName
=
!
TextUtils
.
isEmpty
(
startPoint
.
getPointName
())
?
startPoint
.
getPointName
()
:
"未知名称"
;
double
[]
endPointArr
=
GpsUtil
.
toGCJ02Point
(
endPoint
.
getyPoint
(),
endPoint
.
getxPoint
());
mEndPoint
=
Tools
.
latLngToPoint
(
new
LatLng
(
endPointArr
[
0
],
endPointArr
[
1
]));
mEndName
=
!
TextUtils
.
isEmpty
(
endPoint
.
getPointName
())
?
endPoint
.
getPointName
()
:
"未知名称"
;
}
}
popupLayout
.
show
();
PoiFavorite
resultStartPoint
=
new
PoiFavorite
(
mStartPoint
,
mStartName
);
PoiFavorite
resultEndPoint
=
new
PoiFavorite
(
mEndPoint
,
mEndName
);
RoutePlan
routePlan
=
new
RoutePlan
();
mNaviSession
.
calculateDriveRoute
(
resultStartPoint
,
wayPoints
,
resultEndPoint
,
routePlan
,
NaviSession
.
RouteMethod
.
multipleResult
);
}
}
private
void
createNaviBt
()
{
@SuppressLint
(
"HandlerLeak"
)
if
(
bottomView
==
null
)
{
Handler
pointHandler
=
new
Handler
()
{
bottomView
=
inflate
(
mContext
,
R
.
layout
.
layout_navi_bottom
,
null
);
@Override
TextView
naviTv
=
bottomView
.
findViewById
(
R
.
id
.
navi_start_tv
);
public
void
handleMessage
(
@NonNull
Message
msg
)
{
naviTv
.
setOnClickListener
(
view
->
{
super
.
handleMessage
(
msg
);
arcGisLocationView
.
setSearchLocation
(
tempStartPoint
.
getxPoint
(),
tempStartPoint
.
getyPoint
(),
Variable
.
SearchType
.
START_ADDRESS_SEARCH
);
arcGisLocationView
.
setSearchLocation
(
tempEndPoint
.
getxPoint
(),
tempEndPoint
.
getyPoint
(),
Variable
.
SearchType
.
END_ADDRESS_SEARCH
);
}
};
/**
* 显示底部导航按钮
*/
private
void
showBottomNaviBtnLatout
()
{
bottomNaviParentView
=
inflate
(
mContext
,
R
.
layout
.
layout_navi_bottom
,
null
);
LinearLayout
mBottomLayout
=
bottomNaviParentView
.
findViewById
(
R
.
id
.
bottom_navi_ll
);
TextView
mTitle
=
bottomNaviParentView
.
findViewById
(
R
.
id
.
bottom_navi_title_tv
);
ImageView
mCloseIv
=
bottomNaviParentView
.
findViewById
(
R
.
id
.
bottom_navi_close_iv
);
TextView
mAddressLabelTv
=
bottomNaviParentView
.
findViewById
(
R
.
id
.
navi_address_label
);
ImageView
mAddressArrowIv
=
bottomNaviParentView
.
findViewById
(
R
.
id
.
navi_address_arrow
);
TextView
mStartAddressTv
=
bottomNaviParentView
.
findViewById
(
R
.
id
.
navi_start_address
);
TextView
mEndAddressTv
=
bottomNaviParentView
.
findViewById
(
R
.
id
.
navi_end_address
);
TextView
mDistanceLabelTv
=
bottomNaviParentView
.
findViewById
(
R
.
id
.
navi_distance_label
);
TextView
mDistanceTv
=
bottomNaviParentView
.
findViewById
(
R
.
id
.
navi_distance
);
TextView
mTimeLabelTv
=
bottomNaviParentView
.
findViewById
(
R
.
id
.
navi_time_label
);
TextView
mTimeTv
=
bottomNaviParentView
.
findViewById
(
R
.
id
.
navi_time
);
bottomNaviTv
=
bottomNaviParentView
.
findViewById
(
R
.
id
.
navi_start_tv
);
bottomNaviTv
.
setText
(
mContext
.
getString
(
R
.
string
.
string_navi_start_navi
));
mStartAddressTv
.
setText
(
tempStartPoint
.
getPointName
());
mEndAddressTv
.
setText
(
tempEndPoint
.
getPointName
());
mDistanceTv
.
setText
(
String
.
format
(
"%s公里"
,
ToolUtil
.
getRoadLenght
(
length
)));
mTimeTv
.
setText
(
String
.
format
(
"%s"
,
ToolUtil
.
getRoadTime
(
estimatedTime
)));
mCloseIv
.
setOnClickListener
(
v
->
{
showAllView
();
bottomNaviParentView
.
setVisibility
(
View
.
GONE
);
});
bottomNaviTv
.
setOnClickListener
(
view
->
{
if
(
isNaving
)
{
if
(
mNaviSession
.
isInSimulation
())
{
mNaviSession
.
endSimulation
();
}
isNaving
=
false
;
mNaviLayout
.
setVisibility
(
GONE
);
showAllView
();
bottomNaviParentView
.
setVisibility
(
View
.
GONE
);
NaviSpeaker
.
enqueue
(
"退出导航"
);
Toast
.
makeText
(
mContext
,
"退出导航"
,
Toast
.
LENGTH_LONG
).
show
();
}
else
{
mBottomLayout
.
setBackgroundColor
(
ContextCompat
.
getColor
(
mContext
,
R
.
color
.
colorTrans
));
mTitle
.
setVisibility
(
View
.
GONE
);
mCloseIv
.
setVisibility
(
View
.
GONE
);
mAddressLabelTv
.
setVisibility
(
View
.
GONE
);
mAddressArrowIv
.
setVisibility
(
View
.
GONE
);
mStartAddressTv
.
setVisibility
(
View
.
GONE
);
mEndAddressTv
.
setVisibility
(
View
.
GONE
);
mDistanceLabelTv
.
setVisibility
(
View
.
GONE
);
mDistanceTv
.
setVisibility
(
View
.
GONE
);
mTimeLabelTv
.
setVisibility
(
View
.
GONE
);
mTimeTv
.
setVisibility
(
View
.
GONE
);
startNavi
();
startNavi
();
// mineNaviGuide.startDemo();
}
// mineNaviGuide.setDemoSpeed(MineNaviGuide.DEMO_SPEED_Middle);
});
//导航
mineNaviGuide
.
startGuide
();
});
addView
(
bottomView
);
}
bottomView
.
setVisibility
(
View
.
VISIBLE
);
FrameLayout
.
LayoutParams
layoutParams
=
new
FrameLayout
.
LayoutParams
(
LayoutParams
.
MATCH_PARENT
,
LayoutParams
.
WRAP_CONTENT
);
layoutParams
.
gravity
=
Gravity
.
BOTTOM
;
addView
(
bottomNaviParentView
,
layoutParams
);
}
}
/**
* 开始导航
*/
private
void
startNavi
()
{
private
void
startNavi
()
{
Toast
.
makeText
(
mContext
,
"开始导航"
,
Toast
.
LENGTH_LONG
).
show
();
isNaving
=
true
;
ttsProvider
.
startSpeak
(
"导航开始"
);
NaviSpeaker
.
enqueue
(
"导航开始"
);
bottomNaviTv
.
setText
(
mContext
.
getString
(
R
.
string
.
string_navi_quit_navi
));
((
Activity
)
mContext
).
getWindow
().
addFlags
(
WindowManager
.
LayoutParams
.
FLAG_KEEP_SCREEN_ON
);
//屏幕常亮
initNaviRootView
();
initNaviSetting
();
// normalNavi();
if
(
bottomView
!=
null
)
{
if
(!
isInternetEnviron
){
bottomView
.
setVisibility
(
View
.
GONE
);
normalNavi
();
naviTipView
.
setVisibility
(
View
.
VISIBLE
);
}
else
{
simulationNavi
();
}
}
/**
* 模拟导航
*/
private
void
simulationNavi
()
{
mNaviLayout
.
setVisibility
(
VISIBLE
);
mNaviSession
.
takeRoute
(
mRouteCollection
.
routes
[
0
]);
NaviSpeaker
.
stop
();
// 设置速度
mNaviSession
.
setEmulatorNaviSpeed
(
10.0f
);
// 开始导航
mNaviSession
.
startSimulation
();
//设置图标
setNaviIcon
(
mPointCollection
.
get
(
0
),
0
);
}
/**
* 正常导航
*/
private
void
normalNavi
()
{
mNaviLayout
.
setVisibility
(
VISIBLE
);
mNaviSession
.
takeRoute
(
mRouteCollection
.
routes
[
0
]);
setNaviIcon
(
mPointCollection
.
get
(
0
),
0
);
// arcGisLocationView.setShowMap(false);
// arcGisLocationView.startLocation(mapScanleValue);
}
private
void
setNaviIcon
(
com
.
esri
.
arcgisruntime
.
geometry
.
Point
point
,
float
carOri
)
{
try
{
BitmapDrawable
bitmapDrawableNormal
=
(
BitmapDrawable
)
ContextCompat
.
getDrawable
(
mContext
,
R
.
drawable
.
icon_route_text_start
);
PictureMarkerSymbol
destinationSymbolNormal
=
PictureMarkerSymbol
.
createAsync
(
bitmapDrawableNormal
).
get
();
if
(
carOri
<
0
)
{
carOri
+=
360
;
}
destinationSymbolNormal
.
setAngle
(
carOri
);
arcGisLocationView
.
mRouteMarkerGraphicsOverlay
.
getGraphics
().
add
(
new
Graphic
(
point
,
destinationSymbolNormal
));
arcGisLocationView
.
mMapView
.
setViewpointCenterAsync
(
point
);
arcGisLocationView
.
mMapView
.
setViewpointScaleAsync
(
mapScanleValue
/
20
);
arcGisLocationView
.
mMapView
.
setViewpointRotationAsync
(-
carOri
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
hideAllView
();
((
Activity
)
mContext
).
getWindow
().
addFlags
(
WindowManager
.
LayoutParams
.
FLAG_KEEP_SCREEN_ON
);
//屏幕常亮
}
}
private
void
showAllView
()
{
private
void
showAllView
()
{
arcGisSearchView
.
currSearchType
=
Variable
.
SearchType
.
SEARCH
;
arcGisLocationView
.
currSearchType
=
Variable
.
SearchType
.
NONE
;
arcGisLocationView
.
mNaviGraphicsOverlay
.
getGraphics
().
clear
();
arcGisLocationView
.
mRouteMarkerGraphicsOverlay
.
getGraphics
().
clear
();
arcGisLocationView
.
mMapView
.
setViewpointRotationAsync
(
0
);
arcGisLocationView
.
mLocationIv
.
performClick
();
if
(
ArcGisLocationView
.
instance
!=
null
)
{
if
(
ArcGisLocationView
.
instance
!=
null
)
{
ArcGisLocationView
.
instance
.
setVisibility
(
View
.
VISIBLE
);
ArcGisLocationView
.
instance
.
setVisibility
(
View
.
VISIBLE
);
}
}
if
(
ArcGisSearchView
.
instance
!=
null
)
{
if
(
ArcGisSearchView
.
instance
!=
null
)
{
if
(
isHa
sSearchView
)
{
if
(
hasArcGi
sSearchView
)
{
ArcGisSearchView
.
instance
.
setVisibility
(
View
.
VISIBLE
);
ArcGisSearchView
.
instance
.
setVisibility
(
View
.
VISIBLE
);
}
else
{
}
else
{
ArcGisSearchView
.
instance
.
setVisibility
(
View
.
GONE
);
ArcGisSearchView
.
instance
.
setVisibility
(
View
.
GONE
);
...
@@ -1236,6 +997,9 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
...
@@ -1236,6 +997,9 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
}
}
/**
* 隐藏全部view
*/
private
void
hideAllView
()
{
private
void
hideAllView
()
{
if
(
ArcGisLocationView
.
instance
!=
null
)
{
if
(
ArcGisLocationView
.
instance
!=
null
)
{
ArcGisLocationView
.
instance
.
setVisibility
(
View
.
GONE
);
ArcGisLocationView
.
instance
.
setVisibility
(
View
.
GONE
);
...
@@ -1256,6 +1020,590 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
...
@@ -1256,6 +1020,590 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
}
}
}
}
/**
* 算路、导航事件回调
*/
private
final
MineNaviListener
mineNaviListener
=
new
MineNaviListener
()
{
/**
* 路线规划成功
*/
@Override
public
void
onCalculateRouteSuccess
(
RouteCollection
data
)
{
disDialog
();
if
(
data
==
null
)
{
Toast
.
makeText
(
mContext
,
"没有路线信息"
,
Toast
.
LENGTH_LONG
).
show
();
return
;
}
Toast
.
makeText
(
mContext
,
"路线规划完毕"
,
Toast
.
LENGTH_LONG
).
show
();
if
(
bottomInputPopupLayout
!=
null
)
{
bottomInputPopupLayout
.
dismiss
();
}
// 获取路线规划信息
mRouteCollection
=
data
;
routeDrawStyle
.
setRouteDrawStyle
(
RouteDrawStyle
.
RouteStyleE
.
common
);
// 当前路程全程所需的时间,单位秒
estimatedTime
=
mRouteCollection
.
routes
[
0
].
getEstimatedTime
();
// 当前路程全程的距离,单位米
length
=
mRouteCollection
.
routes
[
0
].
getLength
();
showBottomNaviBtnLatout
();
hideAllView
();
// 获取路线
drawRoute
(
mRouteCollection
);
}
/**
* 路线规划失败
*/
@Override
public
void
onCalculateRouteFailed
(
RouterErrorInfo
data
)
{
disDialog
();
//算路失败
RouterErrorInfo
re
=
data
;
Log
.
e
(
"onCalculateRouteFailed"
,
re
.
errCode
+
""
);
String
msg
=
null
;
switch
(
re
.
errCode
)
{
case
RouterErrorInfo
.
Type
.
ComputeFailed
:
msg
=
"路线计算失败"
;
break
;
case
RouterErrorInfo
.
Type
.
destAuthError
:
msg
=
"终点所在位置数据授权错误"
;
break
;
case
RouterErrorInfo
.
Type
.
destNoData
:
msg
=
"重点所在位置没有数据"
;
break
;
case
RouterErrorInfo
.
Type
.
MissingSubfiles
:
msg
=
"缺少途径省份数据"
;
break
;
case
RouterErrorInfo
.
Type
.
NetworkError
:
msg
=
"网络连接错误"
;
break
;
case
RouterErrorInfo
.
Type
.
None
:
// 没有错误信息
break
;
case
RouterErrorInfo
.
Type
.
NotEnoughMemory
:
msg
=
"没有足够的内存可以使用"
;
break
;
case
RouterErrorInfo
.
Type
.
oriAuthError
:
msg
=
"起点所在位置数据授权错误"
;
break
;
case
RouterErrorInfo
.
Type
.
OriDestTooNear
:
msg
=
"起点和终点距离太近"
;
break
;
case
RouterErrorInfo
.
Type
.
oriNoData
:
msg
=
"起点所在位置没有数据"
;
break
;
case
RouterErrorInfo
.
Type
.
SetDestFailed
:
msg
=
"设置终点失败"
;
break
;
case
RouterErrorInfo
.
Type
.
SetOriFailed
:
msg
=
"设置起点失败"
;
break
;
case
RouterErrorInfo
.
Type
.
waypointAuthError
:
msg
=
"途经点所在位置数据授权错误"
;
break
;
case
RouterErrorInfo
.
Type
.
waypointNoData
:
msg
=
"途经点所在位置没有数据"
;
break
;
}
if
(
msg
!=
null
)
{
Toast
.
makeText
(
mContext
,
msg
,
Toast
.
LENGTH_SHORT
).
show
();
}
NaviSpeaker
.
enqueue
(
"路线规划失败"
);
// 关闭等待
}
/**
* 到达目的地
*/
@Override
public
void
onArriveDestination
()
{
NaviSpeaker
.
enqueue
(
"导航结束"
);
Toast
.
makeText
(
mContext
,
"导航结束"
,
Toast
.
LENGTH_LONG
).
show
();
if
(
mNaviSession
.
isInSimulation
())
{
mNaviSession
.
endSimulation
();
}
// 隐藏导航信息
mNaviLayout
.
setVisibility
(
GONE
);
showAllView
();
bottomNaviParentView
.
setVisibility
(
View
.
GONE
);
isNaving
=
false
;
}
/**
* 需要重新算路
*/
@Override
public
void
onNeedsReroute
()
{
}
/**
* 当前有新的转弯箭头需要显示
*/
@Override
public
void
onNewArrow
(
ArrowInfo
arrowInfo
)
{
}
/**
* 当前转弯箭头不需要显示
*/
@Override
public
void
onDeleteArrow
()
{
}
/**
* 采纳新路线
*/
@Override
public
void
onNewRouteTaken
()
{
}
/**
* 重算路取消
*/
@Override
public
void
onRerouteCancelled
()
{
}
/**
* 重算路完成
*/
@Override
public
void
onRerouteComplete
(
RouteBase
data
)
{
}
/**
* 重算路失败
*/
@Override
public
void
onRerouteFailed
(
RouterErrorInfo
data
)
{
}
/**
* 开始重算路
*/
@Override
public
void
onRerouteStarted
()
{
}
/**
* 算路取消
*/
@Override
public
void
onRouteCancelled
()
{
}
/**
* 算路开始
*/
@Override
public
void
onRouteStarted
()
{
}
/**
* 正在算路中
*/
@Override
public
void
onRouting
()
{
}
/**
* 模拟导航开始
*/
@Override
public
void
onSimNaviBegin
()
{
}
@Override
public
void
onEndEmulatorNavi
()
{
NaviSpeaker
.
enqueue
(
"导航结束"
);
Toast
.
makeText
(
mContext
,
"导航结束"
,
Toast
.
LENGTH_LONG
).
show
();
if
(
mNaviSession
.
isInSimulation
())
{
mNaviSession
.
endSimulation
();
}
// 隐藏导航信息
mNaviLayout
.
setVisibility
(
GONE
);
showAllView
();
bottomNaviParentView
.
setVisibility
(
View
.
GONE
);
isNaving
=
false
;
}
/**
* 车的位置发生改变
*/
@Override
public
void
onTracking
(
NaviSessionData
data
)
{
if
(
isNaving
)
{
arcGisLocationView
.
mRouteMarkerGraphicsOverlay
.
getGraphics
().
clear
();
float
carOri
=
data
.
carOri
;
com
.
esri
.
arcgisruntime
.
geometry
.
Point
point
;
LatLng
latLng
=
Tools
.
pointToLatLng
(
data
.
carPos
);
if
(!
isInternetEnviron
)
{
point
=
new
com
.
esri
.
arcgisruntime
.
geometry
.
Point
(
latLng
.
longitude
,
latLng
.
latitude
);
}
else
{
double
[]
pointArr
=
GpsUtil
.
toWGS84Point
(
latLng
.
latitude
,
latLng
.
longitude
);
point
=
new
com
.
esri
.
arcgisruntime
.
geometry
.
Point
(
pointArr
[
1
],
pointArr
[
0
]);
}
setNaviIcon
(
point
,
carOri
);
}
}
/**
* 导航时平滑跟踪车
*/
@Override
public
void
onSmoothTracking
(
SmoothNaviData
data
)
{
}
};
/**
* 添加导航线
*/
private
void
drawRoute
(
RouteCollection
routeCollection
)
{
routeInfoList
.
clear
();
routeInfoList
.
addAll
(
Arrays
.
asList
(
routeCollection
.
routes
));
showRoutePath
();
}
/**
* 描画路线
*/
private
void
showRoutePath
()
{
//每次描绘前都要清楚上次的描绘。
mPointCollection
.
clear
();
//目前只简单显示第一条路线
RouteBase
routeInfo0
=
routeInfoList
.
get
(
0
);
List
<
JamPath
>
jamPathList0
=
JamPath
.
convertRouteBaseToJamPath
(
routeInfo0
);
for
(
int
k
=
0
;
k
<
jamPathList0
.
size
();
k
++)
{
JamPath
jamPath
=
jamPathList0
.
get
(
k
);
List
<
LatLng
>
list
=
jamPath
.
paths
;
for
(
int
m
=
0
;
m
<
list
.
size
();
m
++)
{
if
(!
isInternetEnviron
)
{
com
.
esri
.
arcgisruntime
.
geometry
.
Point
point
=
new
com
.
esri
.
arcgisruntime
.
geometry
.
Point
(
list
.
get
(
m
).
longitude
,
list
.
get
(
m
).
latitude
);
mPointCollection
.
add
(
point
);
}
else
{
double
[]
pointArr
=
GpsUtil
.
toWGS84Point
(
list
.
get
(
m
).
latitude
,
list
.
get
(
m
).
longitude
);
com
.
esri
.
arcgisruntime
.
geometry
.
Point
point
=
new
com
.
esri
.
arcgisruntime
.
geometry
.
Point
(
pointArr
[
1
],
pointArr
[
0
]);
mPointCollection
.
add
(
point
);
}
}
}
Polyline
polyline
=
new
Polyline
(
mPointCollection
);
SimpleLineSymbol
lineSymbol
=
new
SimpleLineSymbol
(
SimpleLineSymbol
.
Style
.
SOLID
,
ContextCompat
.
getColor
(
mContext
,
R
.
color
.
mask_tmc_1
),
5
);
Graphic
routeGraphic
=
new
Graphic
(
polyline
,
lineSymbol
);
arcGisLocationView
.
mNaviGraphicsOverlay
.
getGraphics
().
add
(
routeGraphic
);
//显示所有点在屏幕内
Geometry
shape
=
routeGraphic
.
getGeometry
();
arcGisLocationView
.
mMapView
.
setViewpointGeometryAsync
(
shape
,
100
);
}
/**
* 导航root布局
*/
private
void
initNaviRootView
()
{
naviRootView
=
inflate
(
mContext
,
R
.
layout
.
layout_navi_root
,
null
);
// 导航信息
mNaviLayout
=
naviRootView
.
findViewById
(
R
.
id
.
ll_navi_information
);
// 导航路口剩余距离
tv_turnDistance
=
mNaviLayout
.
findViewById
(
R
.
id
.
tv_turnDistance
);
// 导航路线名称
tv_turnRoadName
=
mNaviLayout
.
findViewById
(
R
.
id
.
tv_turnRoadName
);
//导航标
mTurnIconView
=
mNaviLayout
.
findViewById
(
R
.
id
.
turnIconView
);
// 转向动作
tv_turnAction
=
mNaviLayout
.
findViewById
(
R
.
id
.
tv_turnAction
);
// 出口
mNavingExitPortTv
=
mNaviLayout
.
findViewById
(
R
.
id
.
tv_naving_exit_port
);
// 交通灯
iv_bottomTrafficLight
=
mNaviLayout
.
findViewById
(
R
.
id
.
iv_bottomTrafficLight
);
// 交通灯数量
tv_trafficLightNumber
=
mNaviLayout
.
findViewById
(
R
.
id
.
tv_trafficLightNumber
);
// 剩余的时间和距离
tv_residualTimeDistance
=
mNaviLayout
.
findViewById
(
R
.
id
.
tv_residualTimeDistance
);
// 到达时间
tv_arriveTime
=
mNaviLayout
.
findViewById
(
R
.
id
.
tv_arriveTime
);
// 预估时间
tv_time
=
mNaviLayout
.
findViewById
(
R
.
id
.
tv_time
);
// 放大图
mjunctionViewDecorView
=
naviRootView
.
findViewById
(
R
.
id
.
ll_junctionViewDecorView
);
// 放大图container
rl_junctionViewContainer
=
mjunctionViewDecorView
.
findViewById
(
R
.
id
.
rl_junctionViewContainer
);
// 导航路口剩余距离
tv_turnDistanceInJunctionView
=
mjunctionViewDecorView
.
findViewById
(
R
.
id
.
tv_turnDistanceInJunctionView
);
// 导航路线名称
tv_turnRoadNameInJunctionView
=
mjunctionViewDecorView
.
findViewById
(
R
.
id
.
tv_turnRoadNameInJunctionView
);
//导航标
mTurnIconViewInJunctionView
=
mjunctionViewDecorView
.
findViewById
(
R
.
id
.
turnIconViewInJunctionView
);
// 转向动作
tv_turnActionInJunctionView
=
mjunctionViewDecorView
.
findViewById
(
R
.
id
.
tv_turnActionInJunctionView
);
// 车道线
laneView
=
naviRootView
.
findViewById
(
R
.
id
.
naviLandBand
);
//放大图设置
junctionView
=
new
MyJunctionView
(
mContext
);
ExpandView3
.
setUrlBase
(
ExpandView3
.
UrlType
.
roadnet
,
Constants
.
BASE_NAVI_EXPAND_VIEW_URL
);
RelativeLayout
.
LayoutParams
layoutParams
=
new
RelativeLayout
.
LayoutParams
(
RelativeLayout
.
LayoutParams
.
MATCH_PARENT
,
RelativeLayout
.
LayoutParams
.
MATCH_PARENT
);
rl_junctionViewContainer
.
addView
(
junctionView
,
layoutParams
);
junctionView
.
setOnClickListener
(
v
->
{
enableShowJunctionView
(
false
);
});
junctionView
.
setOnJunctionViewListener
((
gl
,
config
)
->
{
ExpandView3
.
setUrlBase
(
ExpandView3
.
UrlType
.
roadnet
,
Constants
.
BASE_NAVI_EXPAND_VIEW_URL
);
ExpandView3
.
enableV4
(
true
);
//设置在线路口放大图数据模式
ExpandView3
.
setDataPreference
(
DataPreference
.
onlineOnly
);
junctionView
.
addEventHandler
(
event
->
{
switch
(
event
)
{
case
ExpandView3
.
Event
.
show
:
enableShowJunctionView
(
true
);
break
;
case
ExpandView3
.
Event
.
hide
:
enableShowJunctionView
(
false
);
break
;
}
});
});
//车道图设置
laneView
.
addListener
((
event
,
data
)
->
{
switch
(
event
)
{
case
LaneDetector
.
Event
.
showImages
:
laneView
.
setVisibility
(
VISIBLE
);
break
;
case
LaneDetector
.
Event
.
hideImages
:
laneView
.
setVisibility
(
GONE
);
break
;
}
});
FrameLayout
.
LayoutParams
rootParams
=
new
FrameLayout
.
LayoutParams
(
LayoutParams
.
MATCH_PARENT
,
LayoutParams
.
WRAP_CONTENT
);
rootParams
.
gravity
=
Gravity
.
TOP
;
addView
(
naviRootView
,
rootParams
);
}
private
void
initNaviSetting
()
{
//定位设置
if
(
gpsTracker
==
null
)
{
gpsTracker
=
GpsTracker
.
getInstance
();
}
gpsTracker
.
registerGpsTrackerListener
((
i
,
o
)
->
{
switch
(
i
)
{
case
GpsTracker
.
GPSEvent
.
disconnected
:
Toast
.
makeText
(
mContext
,
"GPS未连接,请开启GPS"
,
Toast
.
LENGTH_LONG
).
show
();
break
;
case
GpsTracker
.
GPSEvent
.
connected
:
//连接上GPS,就消失对话框
Toast
.
makeText
(
mContext
,
"GPS已连接"
,
Toast
.
LENGTH_LONG
).
show
();
break
;
}
},
null
);
//导航信息设置
NaviProgressMonitor
.
getInstance
().
addListener
(
mNaviProgressUpdatedListener
);
GuidanceTextGenerator
mGuidanceTextGenerator
=
new
GuidanceTextGenerator
();
mGuidanceTextGenerator
.
addListener
(
mGuidanceTextGeneratorChangedListener
);
ScreenUtil
.
getInstance
().
init
(
mContext
,
((
Activity
)
mContext
).
getWindow
());
mUtils
=
new
Utils
();
mUtils
.
init
(
mContext
);
}
/**
* 显示/隐藏放大图
*/
private
void
enableShowJunctionView
(
boolean
enable
)
{
if
(!
isNaving
)
{
return
;
}
if
(
enable
)
{
mNaviLayout
.
setVisibility
(
GONE
);
mjunctionViewDecorView
.
setVisibility
(
VISIBLE
);
rl_junctionViewContainer
.
setVisibility
(
VISIBLE
);
junctionView
.
setVisibility
(
VISIBLE
);
junctionView
.
requestRender
();
}
else
{
mjunctionViewDecorView
.
setVisibility
(
INVISIBLE
);
junctionView
.
setVisibility
(
INVISIBLE
);
rl_junctionViewContainer
.
setVisibility
(
INVISIBLE
);
mNaviLayout
.
setVisibility
(
VISIBLE
);
}
}
/**
* 导航信息更新监听
*/
private
final
NaviProgressMonitor
.
NaviProgressUpdatedListener
mNaviProgressUpdatedListener
=
new
NaviProgressMonitor
.
NaviProgressUpdatedListener
()
{
@Override
public
void
onDataUpdated
(
NaviProgressData
naviProgressData
)
{
if
(
isNaving
)
{
setResidualDistance
(
naviProgressData
.
remainingTime
,
naviProgressData
.
routeLength
-
naviProgressData
.
curDistance
);
setResidualTime
(
naviProgressData
);
int
remainingTrafficLightCount
=
mRouteCollection
.
routes
[
0
].
calculateTrafficLightCountInDistanceRange
(
naviProgressData
.
curDistance
,
naviProgressData
.
routeLength
);
RouteStatus
statusByRoute
=
RouteExplorer
.
getInstance
().
getStatusByRoute
(
mRouteCollection
.
routes
[
0
]);
if
(
statusByRoute
!=
null
&&
statusByRoute
.
remainingDistance
<
100
*
1000
)
{
iv_bottomTrafficLight
.
setVisibility
(
VISIBLE
);
tv_trafficLightNumber
.
setVisibility
(
VISIBLE
);
tv_trafficLightNumber
.
setText
(
remainingTrafficLightCount
+
""
);
}
else
{
iv_bottomTrafficLight
.
setVisibility
(
GONE
);
tv_trafficLightNumber
.
setVisibility
(
GONE
);
}
}
}
@Override
public
void
onTiBarUpdated
(
final
TmcSections
tmcSections
)
{
}
};
/**
* 导航引导信息更新监听
*/
private
final
GuidanceTextGenerator
.
GuidanceTextGeneratorChangedListener
mGuidanceTextGeneratorChangedListener
=
new
GuidanceTextGenerator
.
GuidanceTextGeneratorChangedListener
()
{
@Override
public
void
onTextChanged
(
GuidanceText
guidanceText
)
{
if
(
isNaving
)
{
if
(
guidanceText
.
icon
==
GuidanceText
.
GuidanceTextIcon
.
exit
)
{
mNavingExitPortTv
.
setVisibility
(
View
.
VISIBLE
);
if
(
TextUtils
.
isEmpty
(
guidanceText
.
exitNumber
))
{
mNavingExitPortTv
.
setText
(
"出口"
);
}
else
{
mNavingExitPortTv
.
setText
(
String
.
format
(
"出口%s"
,
mUtils
.
toDBC
(
guidanceText
.
exitNumber
)));
}
}
else
{
mNavingExitPortTv
.
setVisibility
(
View
.
GONE
);
}
if
(
guidanceText
.
turnIconModel
.
valid
)
{
switch
(
guidanceText
.
turnIconModel
.
type
)
{
case
TurnIconModel
.
Type
.
junction
:
case
TurnIconModel
.
Type
.
rotary
:
mTurnIconView
.
setTurnIconModel
(
guidanceText
.
turnIconModel
);
mTurnIconViewInJunctionView
.
setTurnIconModel
(
guidanceText
.
turnIconModel
);
break
;
case
TurnIconModel
.
Type
.
iconId
:
mTurnIconView
.
setTurnIconId
(
guidanceText
.
turnIconModel
.
iconId
);
mTurnIconViewInJunctionView
.
setTurnIconId
(
guidanceText
.
turnIconModel
.
iconId
);
break
;
}
}
else
{
mTurnIconView
.
setTurnIconId
(
guidanceText
.
turnIconModel
.
iconId
);
mTurnIconViewInJunctionView
.
setTurnIconId
(
guidanceText
.
turnIconModel
.
iconId
);
}
tv_turnAction
.
setText
(
guidanceText
.
action
);
tv_turnActionInJunctionView
.
setText
(
guidanceText
.
action
);
tv_turnRoadName
.
setText
(
mUtils
.
toDBC
(
guidanceText
.
name
));
tv_turnRoadNameInJunctionView
.
setText
(
mUtils
.
toDBC
(
guidanceText
.
name
));
}
}
@Override
public
void
onDistanceChanged
(
int
distance
)
{
if
(
isNaving
)
{
DistanceBean
distanceBean
=
mUtils
.
formatDistance
(
distance
,
false
);
Spannable
distanceToTurnInJunctionViewSpannable
=
SpannableBuilder
.
create
(
mContext
).
append
(
distanceBean
.
distanceValue
,
R
.
dimen
.
nz_px_60
,
R
.
color
.
white
)
.
append
(
distanceBean
.
distanceUnit
,
R
.
dimen
.
nz_px_30
,
R
.
color
.
white
)
.
build
();
tv_turnDistance
.
setText
(
distanceToTurnInJunctionViewSpannable
);
tv_turnDistanceInJunctionView
.
setText
(
distanceToTurnInJunctionViewSpannable
);
}
}
};
/**
* 设置剩余行程距离时间
*/
private
void
setResidualDistance
(
int
hour
,
int
distance
)
{
DistanceBean
distanceBean
=
mUtils
.
formatDistance
(
distance
,
false
);
TimeBean
timeBean
=
mUtils
.
calcTimeBean
(
hour
);
if
(
tv_residualTimeDistance
.
getVisibility
()
==
VISIBLE
)
{
StringBuilder
stringBuilder
=
new
StringBuilder
();
stringBuilder
.
append
(
distanceBean
.
distanceValue
).
append
(
distanceBean
.
distanceUnit
);
tv_residualTimeDistance
.
setText
(
stringBuilder
.
toString
());
stringBuilder
.
delete
(
0
,
stringBuilder
.
length
());
stringBuilder
.
append
(
"剩余"
).
append
(
timeBean
.
hour
==
0
?
""
:
timeBean
.
hour
+
""
)
.
append
(
timeBean
.
hour
==
0
?
""
:
"小时"
).
append
(
timeBean
.
minute
+
""
).
append
(
timeBean
.
hour
==
0
?
"分钟"
:
"分"
);
tv_time
.
setText
(
stringBuilder
);
}
}
/**
* 设置到达时间
*/
private
void
setResidualTime
(
NaviProgressData
naviProgressData
)
{
if
(
naviProgressData
==
null
)
return
;
String
s_arriveTime
=
MineNaviUtil
.
relativeTimeStringFromNow
(
naviProgressData
.
remainingTime
,
mUtils
.
is24Hour
());
StringBuilder
stringBuilder
=
new
StringBuilder
();
if
(
s_arriveTime
.
contains
(
"天"
))
{
stringBuilder
.
append
(
"预计"
).
append
(
s_arriveTime
.
substring
(
0
,
s_arriveTime
.
indexOf
(
"天"
)
+
1
)
+
"\n"
).
append
(
s_arriveTime
.
substring
(
s_arriveTime
.
indexOf
(
"天"
)
+
1
,
s_arriveTime
.
length
())).
append
(
"到达"
);
}
else
if
(
s_arriveTime
.
contains
(
"日"
))
{
stringBuilder
.
append
(
"预计"
).
append
(
s_arriveTime
.
substring
(
0
,
s_arriveTime
.
indexOf
(
"日"
)
+
1
)
+
"\n"
).
append
(
s_arriveTime
.
substring
(
s_arriveTime
.
indexOf
(
"日"
)
+
1
,
s_arriveTime
.
length
())).
append
(
"到达"
);
}
else
{
stringBuilder
.
append
(
"预计\n"
).
append
(
s_arriveTime
).
append
(
"到达"
);
}
tv_arriveTime
.
setText
(
stringBuilder
.
toString
());
}
@Override
public
boolean
onKeyDown
(
int
keyCode
,
KeyEvent
event
)
{
// 是否触发按键为back键
if
(
keyCode
==
KeyEvent
.
KEYCODE_BACK
)
{
return
isNaving
;
}
// 如果不是back键正常响应
return
super
.
onKeyDown
(
keyCode
,
event
);
}
@Override
@Override
protected
void
onWindowVisibilityChanged
(
int
visibility
)
{
protected
void
onWindowVisibilityChanged
(
int
visibility
)
{
super
.
onWindowVisibilityChanged
(
visibility
);
super
.
onWindowVisibilityChanged
(
visibility
);
...
@@ -1264,11 +1612,13 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
...
@@ -1264,11 +1612,13 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
break
;
break
;
case
8
:
//onDestory
case
8
:
//onDestory
if
(
mineNaviGuide
!=
null
)
{
//退出当前页面的时候清理GPS定位监听
mineNaviGuide
.
stopGuide
();
if
(
gpsTracker
!=
null
)
{
mineNaviGuide
.
stopDemo
();
gpsTracker
.
unregisterGpsTrackerListener
();
}
}
break
;
break
;
}
}
}
}
}
}
\ No newline at end of file
arcgislib/src/main/res/layout/layout_navi.xml
View file @
0d0d6e64
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<
Linear
Layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<
Relative
Layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:id=
"@+id/navi_layout"
android:id=
"@+id/navi_layout"
style=
"@style/MatchParent"
style=
"@style/MatchParent"
android:orientation=
"vertical"
android:orientation=
"vertical"
android:layout_marginTop=
"@dimen/dimen_block_20"
android:layout_marginLeft=
"@dimen/dimen_block_10"
android:layout_marginRight=
"@dimen/dimen_block_10"
android:layout_marginBottom=
"@dimen/dimen_block_20"
android:gravity=
"right|top"
>
>
<ImageView
<ImageView
android:id=
"@+id/navi_iv"
android:id=
"@+id/navi_iv"
style=
"@style/WrapContent"
style=
"@style/WrapContent"
android:src=
"@drawable/icon_route_navi"
android:src=
"@drawable/icon_route_navi"
android:layout_alignParentRight=
"true"
android:paddingTop=
"@dimen/dimen_block_20"
android:paddingLeft=
"@dimen/dimen_block_10"
android:paddingRight=
"@dimen/dimen_block_10"
android:paddingBottom=
"@dimen/dimen_block_20"
/>
/>
</LinearLayout>
</RelativeLayout>
\ No newline at end of file
\ No newline at end of file
arcgislib/src/main/res/layout/layout_navi_bottom.xml
View file @
0d0d6e64
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:id=
"@+id/bottom_navi_ll"
android:orientation=
"vertical"
android:orientation=
"vertical"
android:layout_width=
"match_parent"
style=
"@style/WrapContent.WidthMatchParent"
android:layout_height=
"match_parent"
android:padding=
"@dimen/dimen_block_10"
android:gravity=
"bottom|center"
>
android:gravity=
"bottom|center"
android:background=
"@color/colorWhite"
>
<RelativeLayout
style=
"@style/WrapContent.WidthMatchParent"
>
<ImageView
android:id=
"@+id/bottom_navi_close_iv"
style=
"@style/WrapContent"
android:src=
"@drawable/icon_gray_close"
android:layout_alignParentRight=
"true"
android:paddingTop=
"@dimen/dimen_block_10"
android:paddingBottom=
"@dimen/dimen_block_10"
android:paddingLeft=
"@dimen/dimen_block_10"
/>
<TextView
android:id=
"@+id/bottom_navi_title_tv"
style=
"@style/WrapContent.main_text_style"
android:text=
"@string/string_navi_navi_detail"
android:layout_centerInParent=
"true"
/>
</RelativeLayout>
<LinearLayout
style=
"@style/WrapContent.WidthMatchParent"
android:orientation=
"horizontal"
>
<TextView
android:id=
"@+id/navi_address_label"
style=
"@style/WrapContent"
android:text=
"路\u3000线:"
android:textColor=
"@color/color_666666"
android:textSize=
"@dimen/dimen_font_16sp"
android:layout_gravity=
"center_vertical"
/>
<TextView
android:id=
"@+id/navi_start_address"
style=
"@style/WrapContent"
android:text=
"-"
android:textColor=
"@color/color_333333"
android:textSize=
"@dimen/dimen_font_16sp"
android:singleLine=
"true"
android:maxLines=
"1"
android:lines=
"1"
android:ellipsize=
"end"
android:layout_gravity=
"center_vertical"
/>
<ImageView
android:id=
"@+id/navi_address_arrow"
style=
"@style/WrapContent"
android:layout_marginLeft=
"@dimen/dimen_block_2"
android:layout_marginRight=
"@dimen/dimen_block_2"
android:src=
"@drawable/icon_right_black_arrow"
android:layout_gravity=
"center_vertical"
/>
<TextView
android:id=
"@+id/navi_end_address"
style=
"@style/WrapContent"
android:text=
"-"
android:textColor=
"@color/color_333333"
android:textSize=
"@dimen/dimen_font_16sp"
android:singleLine=
"true"
android:maxLines=
"1"
android:lines=
"1"
android:ellipsize=
"end"
android:layout_gravity=
"center_vertical"
/>
</LinearLayout>
<LinearLayout
style=
"@style/WrapContent.WidthMatchParent"
android:layout_marginTop=
"@dimen/dimen_block_5"
android:orientation=
"horizontal"
>
<TextView
android:id=
"@+id/navi_distance_label"
style=
"@style/WrapContent"
android:text=
"路\u3000程:"
android:textColor=
"@color/color_666666"
android:textSize=
"@dimen/dimen_font_16sp"
android:layout_gravity=
"center_vertical"
/>
<TextView
android:id=
"@+id/navi_distance"
style=
"@style/WrapContent"
android:text=
"-"
android:textColor=
"@color/color_333333"
android:textSize=
"@dimen/dimen_font_16sp"
android:singleLine=
"true"
android:maxLines=
"1"
android:lines=
"1"
android:ellipsize=
"end"
android:layout_gravity=
"center_vertical"
/>
</LinearLayout>
<LinearLayout
style=
"@style/WrapContent.WidthMatchParent"
android:layout_marginTop=
"@dimen/dimen_block_5"
android:orientation=
"horizontal"
>
<TextView
android:id=
"@+id/navi_time_label"
style=
"@style/WrapContent"
android:text=
"时\u3000间:"
android:textColor=
"@color/color_666666"
android:textSize=
"@dimen/dimen_font_16sp"
android:layout_gravity=
"center_vertical"
/>
<TextView
android:id=
"@+id/navi_time"
style=
"@style/WrapContent"
android:text=
"-"
android:textColor=
"@color/color_333333"
android:textSize=
"@dimen/dimen_font_16sp"
android:singleLine=
"true"
android:maxLines=
"1"
android:lines=
"1"
android:ellipsize=
"end"
android:layout_gravity=
"center_vertical"
/>
</LinearLayout>
<TextView
<TextView
android:id=
"@+id/navi_start_tv"
android:id=
"@+id/navi_start_tv"
...
...
arcgislib/src/main/res/values/colors.xml
View file @
0d0d6e64
...
@@ -5,7 +5,9 @@
...
@@ -5,7 +5,9 @@
<color
name=
"colorWhite"
>
#FFFFFF
</color>
<color
name=
"colorWhite"
>
#FFFFFF
</color>
<color
name=
"colorWhiteTras"
>
#E6FFFFFF
</color>
<color
name=
"colorWhiteTras"
>
#E6FFFFFF
</color>
<color
name=
"colorBlank"
>
#000000
</color>
<color
name=
"colorBlank"
>
#000000
</color>
<color
name=
"colorTrans"
>
#00000000
</color>
<color
name=
"colorBlankTras"
>
#80000000
</color>
<color
name=
"colorBlankTras"
>
#80000000
</color>
<color
name=
"colorHalfTrans"
>
#B2000000
</color>
<color
name=
"color_333333"
>
#333333
</color>
<color
name=
"color_333333"
>
#333333
</color>
<color
name=
"color_666666"
>
#666666
</color>
<color
name=
"color_666666"
>
#666666
</color>
<color
name=
"color_999999"
>
#999999
</color>
<color
name=
"color_999999"
>
#999999
</color>
...
@@ -17,6 +19,7 @@
...
@@ -17,6 +19,7 @@
<color
name=
"color_1A34BC"
>
#1A34BC
</color>
<color
name=
"color_1A34BC"
>
#1A34BC
</color>
<color
name=
"color_F05B48"
>
#F05B48
</color>
<color
name=
"color_F05B48"
>
#F05B48
</color>
<color
name=
"color_515151"
>
#515151
</color>
<color
name=
"color_515151"
>
#515151
</color>
<color
name=
"color_737373"
>
#737373
</color>
...
...
arcgislib/src/main/res/values/colors_navi.xml
View file @
0d0d6e64
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<resources>
<color
name=
"divide_line_color"
>
#eaeaea
</color>
<!-- 分割线色 -->
<color
name=
"purple_200"
>
#FFBB86FC
</color>
<color
name=
"divide_view_color"
>
#f0f0f0
</color>
<!-- 分割块色 -->
<color
name=
"purple_500"
>
#FF6200EE
</color>
<color
name=
"white"
>
#ffffff
</color>
<!--主题颜色-->
<color
name=
"purple_700"
>
#FF3700B3
</color>
<color
name=
"teal_200"
>
#FF03DAC5
</color>
<color
name=
"teal_700"
>
#FF018786
</color>
<color
name=
"black"
>
#FF000000
</color>
<color
name=
"white"
>
#FFFFFFFF
</color>
<color
name=
"divide_line_color"
>
#eaeaea
</color>
<color
name=
"divide_view_color"
>
#f0f0f0
</color>
<color
name=
"MultipleChoiceButtonChoiceText"
>
#ffffff
</color>
<color
name=
"MultipleChoiceButtonUnchoiceText"
>
#0079FE
</color>
<color
name=
"data_stores_gray"
>
#80ffffff
</color>
<color
name=
"feedback_green"
>
#26d589
</color>
<color
name=
"feedback_gray"
>
#dfe1e3
</color>
<color
name=
"shallow_gray"
>
#9e9e9e
</color>
<color
name=
"item_pressed"
>
#E8E8E8
</color>
<color
name=
"black_06"
>
#0f000000
</color>
<!-- 黑色透明6%push色 -->
<color
name=
"black_06"
>
#0f000000
</color>
<!-- 黑色透明6%push色 -->
<color
name=
"black"
>
#000000
</color>
<color
name=
"
red"
>
#ffff0000
</color>
<color
name=
"
navingViewLinkUpInfoColor"
>
#96989b
</color>
<color
name=
"blue"
>
#008ef2
</color>
<color
name=
"
gray"
>
#B8B8B8
</color>
<!-- 灰色
-->
<color
name=
"
mask_tmc_no"
>
#ff0088cc
</color>
<!--路径的填充
-->
<color
name=
"
grey_text_color"
>
#a3a3a3
</color>
<!-- 灰色字 --
>
<color
name=
"
mask_tmc_1"
>
#00be4c
</color
>
<color
name=
"
gps_accuracy_big"
>
#5bd636
</color>
<!-- GPS强色 --
>
<color
name=
"
mask_tmc_2"
>
#ffae00
</color
>
<color
name=
"
gps_accuracy_small"
>
#f93e3c
</color>
<!-- GPS弱色 --
>
<color
name=
"
mask_tmc_3"
>
#f45656
</color
>
<color
name=
"
sa_color"
>
#008B87
</color>
<color
name=
"
mask_tmc_4"
>
#ff101010
</color>
<color
name=
"
bar_pass_color"
>
#9aabc4
</color
>
<color
name=
"
mask_out_tmc_1"
>
#237042
</color>
<!--路径的边填充--
>
<color
name=
"
bar_mask_tmc_1"
>
#45cc6a
</color>
<color
name=
"
mask_out_tmc_2"
>
#c28000
</color>
<color
name=
"
bar_mask_tmc_2"
>
#ffae00
</color>
<color
name=
"
mask_out_tmc_3"
>
#b23434
</color>
<color
name=
"
bar_mask_tmc_3"
>
#ff5453
</color>
<color
name=
"
mask_out_tmc_4"
>
#741111
</color>
</resources>
</resources>
\ No newline at end of file
arcgislib/src/main/res/values/strings.xml
View file @
0d0d6e64
...
@@ -25,7 +25,9 @@
...
@@ -25,7 +25,9 @@
<string
name=
"string_navi_input_hint"
>
请选择
</string>
<string
name=
"string_navi_input_hint"
>
请选择
</string>
<string
name=
"string_navi_finish"
>
路线规划
</string>
<string
name=
"string_navi_finish"
>
路线规划
</string>
<string
name=
"string_navi_navi"
>
导航
</string>
<string
name=
"string_navi_navi"
>
导航
</string>
<string
name=
"string_navi_navi_detail"
>
详情
</string>
<string
name=
"string_navi_start_navi"
>
开始导航
</string>
<string
name=
"string_navi_start_navi"
>
开始导航
</string>
<string
name=
"string_navi_quit_navi"
>
退出导航
</string>
<!--搜索-->
<!--搜索-->
<string
name=
"string_search_hint"
>
请输入关键字
</string>
<string
name=
"string_search_hint"
>
请输入关键字
</string>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment