Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
excelDemo
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
陈甜
excelDemo
Commits
1d030e23
Commit
1d030e23
authored
Jun 17, 2022
by
Guojunfeng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加天地图转换源,以及给代码补充注释
parent
2c1cf78b
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
250 additions
and
140 deletions
+250
-140
src/main/java/fwj/utils/addressDNSUtil.java
+113
-47
src/main/java/fwj/utils/addressLocationListener.java
+129
-91
src/main/resources/application.properties
+5
-1
src/main/webapp/index.jsp
+3
-1
No files found.
src/main/java/fwj/utils/addressDNSUtil.java
View file @
1d030e23
...
...
@@ -6,25 +6,27 @@ import org.springframework.web.client.RestTemplate;
public
class
addressDNSUtil
{
private
static
final
String
BAIDU_AK
=
"cYfcu0CsGGNIl9GnfwUvGBjdiQDoMsGL"
;
private
static
final
String
GAODE_AK
=
"3866dcd12908db106e73b8f2e75ef3e3"
;
// private static final String GAODE_AK = "3866dcd12908db106e73b8f2e75ef3e3";
private
static
final
String
GAODE_AK
=
"d00bbe32ceb96d23fd8847c1efdfc65e"
;
private
static
final
String
TENGXUN_AK
=
"63GBZ-ADNWX-I564B-765QB-QEMW6-EXFOY"
;
private
static
final
String
TIANDITU_AK
=
"8890c68b649af2c52d04e0d6b28f6003"
;
//type标识正向反向. geo是正向,regeo是反向。
//source 表示调用百度还是高德,高德用gaode,百度用baidu,
//source 表示调用百度还是高德,高德用gaode,百度用baidu,
天地图用tianditu,
//正向需要参数address,使用|分割,
//反向需要参数location,使用|分割,
//这里一开始没定好方向,经纬度整一块了,对性能损耗不大,不修改。
public
static
JSONObject
getGeo
(
String
type
,
String
source
,
String
address
,
String
location
){
public
static
JSONObject
getGeo
(
String
type
,
String
source
,
String
address
,
String
location
)
{
RestTemplate
restTemplate
=
new
RestTemplate
();
JSONObject
responseJO
=
new
JSONObject
();
//正向 ---使用address
if
(
"geo"
.
equals
(
type
))
{
if
(
"geo"
.
equals
(
type
))
{
//来源是百度---百度无法一次性批量,使用循环查询再拼装结果。
if
(
"baidu"
.
equals
(
source
))
{
if
(
"baidu"
.
equals
(
source
))
{
String
[]
addressList
;
if
(
address
.
contains
(
"|"
))
{
//查询多个
if
(
address
.
contains
(
"|"
))
{
//查询多个
addressList
=
address
.
split
(
"\\|"
);
}
else
{
//查询一个
}
else
{
//查询一个
addressList
=
new
String
[
1
];
addressList
[
0
]
=
address
;
}
...
...
@@ -33,58 +35,87 @@ public class addressDNSUtil {
JSONObject
queryJO
;
//这里不new,减少JVM垃圾回收。
for
(
int
i
=
0
;
i
<
addressList
.
length
;
i
++)
{
for
(
int
i
=
0
;
i
<
addressList
.
length
;
i
++)
{
JSONObject
addJO
=
new
JSONObject
();
url
.
append
(
"http://api.map.baidu.com/geocoding/v3/?address="
);
url
.
append
(
addressList
[
i
]);
//2021-05-27
url
.
append
(
"&output=json&ak="
).
append
(
BAIDU_AK
);
String
result
=
restTemplate
.
getForObject
(
url
.
toString
(),
String
.
class
);
String
result
=
restTemplate
.
getForObject
(
url
.
toString
(),
String
.
class
);
System
.
out
.
println
(
addressList
[
i
]
+
result
);
queryJO
=
(
JSONObject
)
JSONObject
.
parseObject
(
result
).
get
(
"result"
);
addJO
.
put
(
"formatted_address"
,
addressList
[
i
]);
//0是百度正向解析成功。
if
(
JSONObject
.
parseObject
(
result
).
getIntValue
(
"status"
)
==
0
)
{
if
(
JSONObject
.
parseObject
(
result
).
getIntValue
(
"status"
)
==
0
)
{
queryJO
=
(
JSONObject
)
queryJO
.
get
(
"location"
);
StringBuffer
latlng
=
new
StringBuffer
(
queryJO
.
getString
(
"lng"
));
latlng
.
append
(
","
).
append
(
queryJO
.
getString
(
"lat"
));
addJO
.
put
(
"location"
,
latlng
);
}
else
{
}
else
{
addJO
.
put
(
"location"
,
""
);
}
jsonArray
.
add
(
addJO
);
url
.
delete
(
0
,
url
.
length
());
url
.
delete
(
0
,
url
.
length
());
}
responseJO
.
put
(
"status"
,
200
);
responseJO
.
put
(
"geocodes"
,
jsonArray
);
return
responseJO
;
return
responseJO
;
}
if
(
"gaode"
.
equals
(
source
))
{
if
(
"gaode"
.
equals
(
source
))
{
StringBuffer
url
=
new
StringBuffer
(
"https://restapi.amap.com/v3/geocode/geo?address="
);
url
.
append
(
address
);
url
.
append
(
"&output=json&key="
).
append
(
GAODE_AK
);
url
.
append
(
"&batch="
).
append
(
"true"
);
//默认开启批量,|分割,最多支持10个
String
result
=
restTemplate
.
getForObject
(
url
.
toString
(),
String
.
class
);
String
result
=
restTemplate
.
getForObject
(
url
.
toString
(),
String
.
class
);
System
.
out
.
println
(
result
);
responseJO
=
JSONObject
.
parseObject
(
result
);
if
(
"1"
.
equals
(
responseJO
.
getString
(
"status"
)))
{
if
(
"1"
.
equals
(
responseJO
.
getString
(
"status"
)))
{
responseJO
.
put
(
"status"
,
200
);
}
return
responseJO
;
}
if
(
"tengxun"
.
equals
(
source
)){
//不支持批量,这里也不进行批量,只查一个。
if
(
"tianditu"
.
equals
(
source
))
{
StringBuffer
url
=
new
StringBuffer
(
"http://api.tianditu.gov.cn/geocoder?ds="
);
String
json
=
"{\"keyWord\":\""
+
address
+
"\"}"
;
url
.
append
(
"{json}"
);
url
.
append
(
"&tk="
).
append
(
TIANDITU_AK
);
String
result
=
restTemplate
.
getForObject
(
url
.
toString
(),
String
.
class
,
json
);
System
.
out
.
println
(
result
);
JSONObject
resultJson
=
JSONObject
.
parseObject
(
result
);
//获得状态码
String
status
=
resultJson
.
getString
(
"status"
);
//若转换成功
if
(
"0"
.
equals
(
status
))
{
responseJO
.
put
(
"status"
,
200
);
JSONObject
locationJson
=
resultJson
.
getJSONObject
(
"location"
);
//获得经纬度
String
lon
=
locationJson
.
getString
(
"lon"
);
String
lat
=
locationJson
.
getString
(
"lat"
);
//拼接经纬度
StringBuffer
latlng
=
new
StringBuffer
(
lon
);
latlng
.
append
(
","
).
append
(
lat
);
//返回值格式为jsonArray,此处拼json放入json数组
JSONArray
jsonArray
=
new
JSONArray
();
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"formatted_address"
,
address
);
jsonObject
.
put
(
"location"
,
latlng
);
jsonArray
.
add
(
jsonObject
);
responseJO
.
put
(
"geocodes"
,
jsonArray
);
}
return
responseJO
;
}
if
(
"tengxun"
.
equals
(
source
))
{
//不支持批量,这里也不进行批量,只查一个。
StringBuffer
url
=
new
StringBuffer
(
"https://apis.map.qq.com/ws/geocoder/v1/?address="
);
url
.
append
(
address
);
url
.
append
(
"&output=json&key="
).
append
(
TENGXUN_AK
);
String
result
=
restTemplate
.
getForObject
(
url
.
toString
(),
String
.
class
);
String
result
=
restTemplate
.
getForObject
(
url
.
toString
(),
String
.
class
);
System
.
out
.
println
(
result
);
responseJO
=
JSONObject
.
parseObject
(
result
);
JSONArray
jsonArray
=
new
JSONArray
();
JSONObject
queryJO
;
if
(
0
==(
responseJO
.
getIntValue
(
"status"
)))
{
JSONObject
queryJO
;
if
(
0
==
(
responseJO
.
getIntValue
(
"status"
)))
{
responseJO
.
put
(
"status"
,
200
);
queryJO
=
(
JSONObject
)
((
JSONObject
)
responseJO
.
get
(
"result"
)).
get
(
"location"
);
StringBuffer
latlng
=
new
StringBuffer
(
queryJO
.
getString
(
"lng"
));
...
...
@@ -98,16 +129,15 @@ public class addressDNSUtil {
}
}
//反向
if
(
"regeo"
.
equals
(
type
))
{
if
(
"regeo"
.
equals
(
type
))
{
//来源是百度
if
(
"baidu"
.
equals
(
source
))
{
if
(
"baidu"
.
equals
(
source
))
{
String
[]
locationList
;
if
(
location
.
contains
(
"|"
))
{
//查询多个
if
(
location
.
contains
(
"|"
))
{
//查询多个
locationList
=
location
.
split
(
"\\|"
);
}
else
{
//查询一个
}
else
{
//查询一个
locationList
=
new
String
[
1
];
locationList
[
0
]
=
location
;
}
...
...
@@ -116,60 +146,100 @@ public class addressDNSUtil {
JSONObject
queryJO
;
//这里不new,减少JVM垃圾回收。
for
(
int
i
=
0
;
i
<
locationList
.
length
;
i
++)
{
for
(
int
i
=
0
;
i
<
locationList
.
length
;
i
++)
{
JSONObject
addJO
=
new
JSONObject
();
url
.
append
(
"http://api.map.baidu.com/reverse_geocoding/v3/?coordtype=wgs84ll&ak="
);
url
.
append
(
BAIDU_AK
);
url
.
append
(
"&output=json&location="
);
url
.
append
(
locationList
[
i
]);
String
result
=
restTemplate
.
getForObject
(
url
.
toString
(),
String
.
class
);
String
result
=
restTemplate
.
getForObject
(
url
.
toString
(),
String
.
class
);
System
.
out
.
println
(
url
);
queryJO
=
(
JSONObject
)
JSONObject
.
parseObject
(
result
).
get
(
"result"
);
addJO
.
put
(
"location"
,
locationList
[
i
]);
//0是百度正向解析成功。
if
(
JSONObject
.
parseObject
(
result
).
getIntValue
(
"status"
)
==
0
&&
!
""
.
equals
(
queryJO
.
getString
(
"formatted_address"
))){
//0是百度解析成功。
if
(
JSONObject
.
parseObject
(
result
).
getIntValue
(
"status"
)
==
0
&&
!
""
.
equals
(
queryJO
.
getString
(
"formatted_address"
)))
{
addJO
.
put
(
"formatted_address"
,
queryJO
.
getString
(
"formatted_address"
));
}
else
{
}
else
{
addJO
.
put
(
"formatted_address"
,
"无效地址"
);
}
jsonArray
.
add
(
addJO
);
url
.
delete
(
0
,
url
.
length
());
url
.
delete
(
0
,
url
.
length
());
}
responseJO
.
put
(
"status"
,
200
);
responseJO
.
put
(
"regeocodes"
,
jsonArray
);
return
responseJO
;
return
responseJO
;
}
if
(
"gaode"
.
equals
(
source
)){
StringBuffer
url
=
new
StringBuffer
(
"https://restapi.amap.com/v3/geocode/regeo?extensions=base&output=json&key="
);
//高德反向
if
(
"gaode"
.
equals
(
source
))
{
StringBuffer
url
=
new
StringBuffer
(
"https://restapi.amap.com/v3/geocode/regeo?extensions=base&output"
+
"=json&key="
);
url
.
append
(
GAODE_AK
);
url
.
append
(
"&location="
).
append
(
location
);
url
.
append
(
"&batch="
).
append
(
"true"
);
String
result
=
restTemplate
.
getForObject
(
url
.
toString
(),
String
.
class
);
String
result
=
restTemplate
.
getForObject
(
url
.
toString
(),
String
.
class
);
responseJO
=
JSONObject
.
parseObject
(
result
);
if
(
"1"
.
equals
(
responseJO
.
getString
(
"status"
)))
{
if
(
"1"
.
equals
(
responseJO
.
getString
(
"status"
)))
{
responseJO
.
put
(
"status"
,
200
);
}
return
responseJO
;
}
if
(
"tengxun"
.
equals
(
source
)){
//不支持批量,这里也不进行批量,只查一个。
//天地图反向
if
(
"tianditu"
.
equals
(
source
))
{
//此处完整的url格式为:
// http://api.tianditu.gov.cn/geocoder?postStr={'lon':116.311469,'lat':39.94199864,'ver':1}&type=geocode&tk=8890c68b649af2c52d04e0d6b28f6003
//{}为占位符,需将{}里的值传入restTemplate.getForObject的第三个参数
try
{
Thread
.
sleep
(
400
);
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
StringBuffer
url
=
new
StringBuffer
(
"http://api.tianditu.gov.cn/geocoder?postStr="
);
String
json
=
"{"
+
location
+
",\"ver\":1}"
;
url
.
append
(
"{json}"
);
url
.
append
(
"&type="
).
append
(
"geocode"
);
url
.
append
(
"&tk="
).
append
(
TIANDITU_AK
);
// String json = "{\"lon\":116.311469,\"lat\":39.94199864,\"ver\":1}";
// String url = "http://api.tianditu.gov.cn/geocoder?postStr={json}&type=geocode&tk=8890c68b649af2c52d04e0d6b28f6003";
String
result
=
restTemplate
.
getForObject
(
url
.
toString
(),
String
.
class
,
json
);
JSONArray
jsonArray
=
new
JSONArray
();
JSONObject
addJO
=
new
JSONObject
();
JSONObject
queryJO
=
JSONObject
.
parseObject
(
result
);
String
status
=
queryJO
.
getString
(
"status"
);
JSONObject
jsonObject
=
queryJO
.
getJSONObject
(
"result"
);
String
formatted_address
=
jsonObject
.
getString
(
"formatted_address"
);
//0是天地图解析成功
if
(
"0"
.
equals
(
status
)
&&
!
""
.
equals
(
formatted_address
))
{
addJO
.
put
(
"formatted_address"
,
formatted_address
);
}
else
{
addJO
.
put
(
"formatted_address"
,
"无效地址"
);
}
//如果将status和regeocodes放在此处,必定不会进入下一次数据源转换,因为必定200且有值
jsonArray
.
add
(
addJO
);
responseJO
.
put
(
"status"
,
200
);
responseJO
.
put
(
"regeocodes"
,
jsonArray
);
return
responseJO
;
}
//腾讯反向
if
(
"tengxun"
.
equals
(
source
))
{
//不支持批量,这里也不进行批量,只查一个。
StringBuffer
url
=
new
StringBuffer
(
"https://apis.map.qq.com/ws/geocoder/v1/?location="
);
url
.
append
(
location
);
url
.
append
(
"&output=json&key="
);
url
.
append
(
TENGXUN_AK
);
String
result
=
restTemplate
.
getForObject
(
url
.
toString
(),
String
.
class
);
String
result
=
restTemplate
.
getForObject
(
url
.
toString
(),
String
.
class
);
System
.
out
.
println
(
url
);
JSONArray
jsonArray
=
new
JSONArray
();
JSONObject
addJO
=
new
JSONObject
();
JSONObject
queryJO
=
(
JSONObject
)
JSONObject
.
parseObject
(
result
).
get
(
"result"
);
addJO
.
put
(
"location"
,
location
);
//0是百度正向解析成功。
if
(
JSONObject
.
parseObject
(
result
).
getIntValue
(
"status"
)
==
0
&&
!
""
.
equals
(
queryJO
.
getString
(
"formatted_address"
))){
//0是腾讯解析成功。
if
(
JSONObject
.
parseObject
(
result
).
getIntValue
(
"status"
)
==
0
&&
!
""
.
equals
(
queryJO
.
getString
(
"formatted_address"
)))
{
addJO
.
put
(
"formatted_address"
,
queryJO
.
getString
(
"address"
));
}
else
{
}
else
{
addJO
.
put
(
"formatted_address"
,
"无效地址"
);
}
jsonArray
.
add
(
addJO
);
...
...
@@ -177,10 +247,6 @@ public class addressDNSUtil {
responseJO
.
put
(
"regeocodes"
,
jsonArray
);
return
responseJO
;
}
}
//请求参数错误。
responseJO
.
put
(
"status"
,
400
);
...
...
src/main/java/fwj/utils/addressLocationListener.java
View file @
1d030e23
...
...
@@ -6,7 +6,6 @@ import com.alibaba.excel.event.AnalysisEventListener;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
fwj.controller.kyPersonController
;
import
fwj.entity.tranLngLat
;
import
org.springframework.util.StringUtils
;
...
...
@@ -18,19 +17,35 @@ import java.time.format.DateTimeFormatter;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* 在该类中的invoke方法中控制使用哪种数据源进行正逆向地理编码
*/
public
class
addressLocationListener
extends
AnalysisEventListener
<
tranLngLat
>
{
List
<
tranLngLat
>
lnglatList
=
new
ArrayList
<>(
1000
);
HttpServletResponse
response
;
String
fileName
;
boolean
isEightFour
;
public
addressLocationListener
(
HttpServletResponse
response
,
String
fileName
,
boolean
isEightFour
){
/**
* 构造方法用于初始化
*
* @param response
* @param fileName
* @param isEightFour
*/
public
addressLocationListener
(
HttpServletResponse
response
,
String
fileName
,
boolean
isEightFour
)
{
this
.
fileName
=
fileName
;
this
.
response
=
response
;
this
.
isEightFour
=
isEightFour
;
}
DateTimeFormatter
dtf2
=
DateTimeFormatter
.
ofPattern
(
"yyyyMMddHHmmss"
);
/**
* 每解析一行会回调invoke()方法。
* 整个excel解析结束会执行doAfterAllAnalysed()方法
*/
@Override
public
void
invoke
(
tranLngLat
tranlnglat
,
AnalysisContext
analysisContext
)
{
JSONObject
jo
=
new
JSONObject
();
...
...
@@ -39,7 +54,9 @@ public class addressLocationListener extends AnalysisEventListener<tranLngLat> {
} catch (InterruptedException e) {
e.printStackTrace();
}*/
if
(!
StringUtils
.
isEmpty
(
tranlnglat
.
getAddress
())){
//标准地址不为空,调用地理编码接口
if
(!
StringUtils
.
isEmpty
(
tranlnglat
.
getAddress
()))
{
/*if("tengxun".equals(source)){
try {//腾讯的因为每秒并发5个,所以使用线程阻塞
Thread.sleep(200);
...
...
@@ -59,24 +76,23 @@ public class addressLocationListener extends AnalysisEventListener<tranLngLat> {
kyPersonController.gaode_geoNum = + 1;
}*/
// tranlnglat = myGeoProcesster(jo, tranlnglat, "tianditu", isEightFour);
tranlnglat
=
myGeoProcesster
(
jo
,
tranlnglat
,
"gaode"
,
isEightFour
);
if
(
tranlnglat
.
getHasSuccess
()
==
0
)
{
if
(
tranlnglat
.
getHasSuccess
()
==
0
)
{
tranlnglat
=
myGeoProcesster
(
jo
,
tranlnglat
,
"baidu"
,
isEightFour
);
if
(
tranlnglat
.
getHasSuccess
()
==
0
)
{
if
(
tranlnglat
.
getHasSuccess
()
==
0
)
{
tranlnglat
=
myGeoProcesster
(
jo
,
tranlnglat
,
"tengxun"
,
isEightFour
);
if
(
tranlnglat
.
getHasSuccess
()
==
0
)
{
tranlnglat
=
myGeoProcesster
(
jo
,
tranlnglat
,
"tianditu"
,
isEightFour
);
}
}
}
/* tranlnglat = myGeoProcesster(jo, tranlnglat, "tengxun");
if(tranlnglat.getHasSuccess() == 0){
tranlnglat = myGeoProcesster(jo, tranlnglat, "baidu");
if(tranlnglat.getHasSuccess() == 0){
tranlnglat = myGeoProcesster(jo, tranlnglat, "gaode");
}
}*/
lnglatList
.
add
(
tranlnglat
);
}
else
{
System
.
out
.
println
(
"有经纬度转 "
+
tranlnglat
.
getId
()
);
}
else
{
//有经纬度,调用逆地理编码接口
System
.
out
.
println
(
"有经纬度转 "
+
tranlnglat
.
getId
());
/*if("tengxun".equals(source)){
...
...
@@ -104,34 +120,44 @@ public class addressLocationListener extends AnalysisEventListener<tranLngLat> {
/* jo = addressDNSUtil.getGeo("regeo", source, "", sb.toString());
System.out.println(JSONObject.toJSONString(jo));
if(jo.getIntValue("status") == 200 && (JSONArray) jo.get("regeocodes") != null && ((JSONArray) jo.get("regeocodes")).size() > 0){
if(jo.getIntValue("status") == 200 && (JSONArray) jo.get("regeocodes") != null && ((JSONArray) jo.get
("regeocodes")).size() > 0){
String a = ((JSONObject) ((JSONArray) jo.get("regeocodes")).get(0)).getString("formatted_address");
tranlnglat.setAddress(a);
}*/
/**
* 默认先调用gaode来源,每次调用成功后会把hasSuccess设置为1,则不会继续调用,反之一个个来源调用
*/
// tranlnglat = myReGeoProcesster(jo, tranlnglat, "gaode");
// if (tranlnglat.getHasSuccess() == 0) {
// tranlnglat = myReGeoProcesster(jo, tranlnglat, "baidu");
// if (tranlnglat.getHasSuccess() == 0) {
// tranlnglat = myReGeoProcesster(jo, tranlnglat, "tengxun");
//
// }
// }
// tranlnglat = myReGeoProcesster(jo, tranlnglat, "tianditu");
tranlnglat
=
myReGeoProcesster
(
jo
,
tranlnglat
,
"gaode"
);
if
(
tranlnglat
.
getHasSuccess
()
==
0
)
{
if
(
tranlnglat
.
getHasSuccess
()
==
0
)
{
tranlnglat
=
myReGeoProcesster
(
jo
,
tranlnglat
,
"baidu"
);
if
(
tranlnglat
.
getHasSuccess
()
==
0
)
{
if
(
tranlnglat
.
getHasSuccess
()
==
0
)
{
tranlnglat
=
myReGeoProcesster
(
jo
,
tranlnglat
,
"tengxun"
);
if
(
tranlnglat
.
getHasSuccess
()
==
0
)
{
tranlnglat
=
myReGeoProcesster
(
jo
,
tranlnglat
,
"tianditu"
);
}
}
}
/* tranlnglat = myReGeoProcesster(jo, tranlnglat, "tengxun");
if(tranlnglat.getHasSuccess() == 0){
tranlnglat = myReGeoProcesster(jo, tranlnglat, "baidu");
if(tranlnglat.getHasSuccess() == 0){
tranlnglat = myReGeoProcesster(jo, tranlnglat, "gaode");
}
}*/
//并发量高的时候,腾讯的会丢失,这里返回原本数据不处理。
lnglatList
.
add
(
tranlnglat
);
}
}
@Override
...
...
@@ -142,13 +168,15 @@ public class addressLocationListener extends AnalysisEventListener<tranLngLat> {
myFile.delete();
}
EasyExcel.write(fileName, idLocation.class).sheet("Sheet1").doWrite(idLocationList);*/
//拿到原本文件名传入downLoadExcel方法
downLoadExcel
(
fileName
);
}
private
void
downLoadExcel
(
String
fileName
)
{
try
{
//输出新文件,拼接新文件名
LocalDateTime
localDateTime
=
LocalDateTime
.
now
();
fileName
=
fileName
.
split
(
"\\."
)[
0
]
.
concat
(
dtf2
.
format
(
localDateTime
))
...
...
@@ -157,97 +185,105 @@ public class addressLocationListener extends AnalysisEventListener<tranLngLat> {
response
.
setCharacterEncoding
(
"UTF-8"
);
response
.
setHeader
(
"content-Type"
,
"application/vnd.ms-excel"
);
response
.
setHeader
(
"Content-Disposition"
,
"attachment;filename="
+
URLEncoder
.
encode
(
fileName
,
"UTF-8"
)
);
if
(
fileName
.
toLowerCase
().
contains
(
"xls"
)){
EasyExcel
.
write
(
response
.
getOutputStream
(),
tranLngLat
.
class
).
excelType
(
ExcelTypeEnum
.
XLS
).
sheet
(
"Sheet1"
).
doWrite
(
lnglatList
);
}
else
{
EasyExcel
.
write
(
response
.
getOutputStream
(),
tranLngLat
.
class
).
excelType
(
ExcelTypeEnum
.
XLSX
).
sheet
(
"Sheet1"
).
doWrite
(
lnglatList
);
response
.
setHeader
(
"Content-Disposition"
,
"attachment;filename="
+
URLEncoder
.
encode
(
fileName
,
"UTF-8"
));
//原本是xls则输出xls,原本是xlsx则输出xlsx
if
(
fileName
.
toLowerCase
().
contains
(
"xls"
))
{
EasyExcel
.
write
(
response
.
getOutputStream
(),
tranLngLat
.
class
).
excelType
(
ExcelTypeEnum
.
XLS
).
sheet
(
"Sheet1"
).
doWrite
(
lnglatList
);
}
else
{
EasyExcel
.
write
(
response
.
getOutputStream
(),
tranLngLat
.
class
).
excelType
(
ExcelTypeEnum
.
XLSX
).
sheet
(
"Sheet1"
).
doWrite
(
lnglatList
);
}
}
catch
(
IOException
e
)
{
throw
new
RuntimeException
(
e
);
throw
new
RuntimeException
(
e
);
}
}
private
tranLngLat
myGeoProcesster
(
JSONObject
jo
,
tranLngLat
mytll
,
String
source
,
boolean
isEightFour
){
private
tranLngLat
myGeoProcesster
(
JSONObject
jo
,
tranLngLat
mytll
,
String
source
,
boolean
isEightFour
)
{
jo
=
addressDNSUtil
.
getGeo
(
"geo"
,
source
,
mytll
.
getAddress
(),
""
);
System
.
out
.
println
(
source
+
"调用 "
+
JSONObject
.
toJSONString
(
jo
));
if
(
jo
.
getIntValue
(
"status"
)
==
200
&&
(
JSONArray
)
jo
.
get
(
"geocodes"
)
!=
null
&&
((
JSONArray
)
jo
.
get
(
"geocodes"
)).
size
()
>
0
){
if
(
jo
.
getIntValue
(
"status"
)
==
200
&&
(
JSONArray
)
jo
.
get
(
"geocodes"
)
!=
null
&&
((
JSONArray
)
jo
.
get
(
"geocodes"
)).
size
()
>
0
)
{
String
location
=
((
JSONObject
)
((
JSONArray
)
jo
.
get
(
"geocodes"
)).
get
(
0
)).
getString
(
"location"
);
if
(
"tengxun"
.
equals
(
source
))
{
mytll
.
setSource
(
"腾讯"
);
if
(
location
.
contains
(
","
))
{
if
(
isEightFour
)
{
//需要转换为84坐标
//需传入lat,lon,返回0是lat,1是lon
double
[]
myD
=
LngLonUtil
.
gcj02_To_Gps84
(
Double
.
valueOf
(
location
.
split
(
","
)[
1
]),
Double
.
valueOf
(
location
.
split
(
","
)[
0
]));
mytll
.
setLng
(
String
.
valueOf
(
myD
[
1
]));
mytll
.
setLat
(
String
.
valueOf
(
myD
[
0
]));
}
else
{
//location的0是lon,1是lat
mytll
.
setLng
(
location
.
split
(
","
)[
0
]);
mytll
.
setLat
(
location
.
split
(
","
)[
1
]);
}
}
if
(
"tengxun"
.
equals
(
source
)){
mytll
.
setSource
(
"腾讯"
);
if
(
location
.
contains
(
","
)){
if
(
isEightFour
){
//需要转换为84坐标
double
[]
myD
=
LngLonUtil
.
gcj02_To_Gps84
(
Double
.
valueOf
(
location
.
split
(
","
)[
1
]),
Double
.
valueOf
(
location
.
split
(
","
)[
0
]));
mytll
.
setLng
(
String
.
valueOf
(
myD
[
1
]));
mytll
.
setLat
(
String
.
valueOf
(
myD
[
0
]));
}
else
{
mytll
.
setLng
(
location
.
split
(
","
)[
0
]);
mytll
.
setLat
(
location
.
split
(
","
)[
1
]);
}
}
}
else
if
(
"gaode"
.
equals
(
source
)){
mytll
.
setSource
(
"高德"
);
if
(
location
.
contains
(
","
)){
if
(
isEightFour
){
//需要转换为84坐标
double
[]
myD
=
LngLonUtil
.
gcj02_To_Gps84
(
Double
.
valueOf
(
location
.
split
(
","
)[
1
]),
Double
.
valueOf
(
location
.
split
(
","
)[
0
]));
mytll
.
setLng
(
String
.
valueOf
(
myD
[
1
]));
mytll
.
setLat
(
String
.
valueOf
(
myD
[
0
]));
}
else
{
mytll
.
setLng
(
location
.
split
(
","
)[
0
]);
mytll
.
setLat
(
location
.
split
(
","
)[
1
]);
}
}
}
else
if
(
"baidu"
.
equals
(
source
))
{
mytll
.
setSource
(
"百度"
);
if
(
location
.
contains
(
","
)){
if
(
isEightFour
){
//需要转换为84坐标
double
[]
myD
=
LngLonUtil
.
bd09_To_gps84
(
Double
.
valueOf
(
location
.
split
(
","
)[
1
]),
Double
.
valueOf
(
location
.
split
(
","
)[
0
]));
mytll
.
setLng
(
String
.
valueOf
(
myD
[
1
]));
mytll
.
setLat
(
String
.
valueOf
(
myD
[
0
]));
}
else
{
mytll
.
setLng
(
location
.
split
(
","
)[
0
]);
mytll
.
setLat
(
location
.
split
(
","
)[
1
]);
}
}
}
else
if
(
"gaode"
.
equals
(
source
))
{
mytll
.
setSource
(
"高德"
);
if
(
location
.
contains
(
","
))
{
if
(
isEightFour
)
{
//需要转换为84坐标
double
[]
myD
=
LngLonUtil
.
gcj02_To_Gps84
(
Double
.
valueOf
(
location
.
split
(
","
)[
1
]),
Double
.
valueOf
(
location
.
split
(
","
)[
0
]));
mytll
.
setLng
(
String
.
valueOf
(
myD
[
1
]));
mytll
.
setLat
(
String
.
valueOf
(
myD
[
0
]));
}
else
{
mytll
.
setLng
(
location
.
split
(
","
)[
0
]);
mytll
.
setLat
(
location
.
split
(
","
)[
1
]);
}
}
}
else
if
(
"baidu"
.
equals
(
source
))
{
mytll
.
setSource
(
"百度"
);
if
(
location
.
contains
(
","
))
{
if
(
isEightFour
)
{
//需要转换为84坐标
double
[]
myD
=
LngLonUtil
.
bd09_To_gps84
(
Double
.
valueOf
(
location
.
split
(
","
)[
1
]),
Double
.
valueOf
(
location
.
split
(
","
)[
0
]));
mytll
.
setLng
(
String
.
valueOf
(
myD
[
1
]));
mytll
.
setLat
(
String
.
valueOf
(
myD
[
0
]));
}
else
{
mytll
.
setLng
(
location
.
split
(
","
)[
0
]);
mytll
.
setLat
(
location
.
split
(
","
)[
1
]);
}
}
}
else
if
(
"tianditu"
.
equals
(
source
))
{
//天地图的坐标系就是CGCS2000,不需要转坐标系
mytll
.
setSource
(
"天地图"
);
if
(
location
.
contains
(
","
))
{
mytll
.
setLng
(
location
.
split
(
","
)[
0
]);
mytll
.
setLat
(
location
.
split
(
","
)[
1
]);
}
}
mytll
.
setHasSuccess
(
1
);
}
else
{
}
else
{
mytll
.
setHasSuccess
(
0
);
}
return
mytll
;
}
private
tranLngLat
myReGeoProcesster
(
JSONObject
jo
,
tranLngLat
mytll
,
String
source
){
private
tranLngLat
myReGeoProcesster
(
JSONObject
jo
,
tranLngLat
mytll
,
String
source
)
{
//这里希望是线程安全的。
//这里的else好像没意义,因为当所有情况调用完还是没结果返回,invoke()方法中的多重if条件判断已经调用完-20220613
StringBuilder
sb
=
new
StringBuilder
();
if
(
"tengxun"
.
equals
(
source
))
{
if
(
"tengxun"
.
equals
(
source
))
{
mytll
.
setSource
(
"腾讯"
);
sb
.
append
(
mytll
.
getLat
()).
append
(
","
).
append
(
mytll
.
getLng
());
}
else
if
(
"gaode"
.
equals
(
source
))
{
//高德地址反向,先传经度后维度
}
else
if
(
"gaode"
.
equals
(
source
))
{
//高德地址反向,先传经度后维度
mytll
.
setSource
(
"高德"
);
sb
.
append
(
mytll
.
getLng
()).
append
(
","
).
append
(
mytll
.
getLat
());
}
else
if
(
"baidu"
.
equals
(
source
))
{
}
else
if
(
"baidu"
.
equals
(
source
))
{
mytll
.
setSource
(
"百度"
);
sb
.
append
(
mytll
.
getLat
()).
append
(
","
).
append
(
mytll
.
getLng
());
}
else
{
}
else
if
(
"tianditu"
.
equals
(
source
))
{
//天地图反向,先传经度后纬度
mytll
.
setSource
(
"天地图"
);
sb
.
append
(
"\"lon\":"
).
append
(
mytll
.
getLng
()).
append
(
",\"lat\":"
).
append
(
mytll
.
getLat
());
}
else
{
sb
.
append
(
mytll
.
getLat
()).
append
(
","
).
append
(
mytll
.
getLng
());
mytll
.
setSource
(
"高德"
);
}
...
...
@@ -255,11 +291,13 @@ public class addressLocationListener extends AnalysisEventListener<tranLngLat> {
jo
=
addressDNSUtil
.
getGeo
(
"regeo"
,
source
,
""
,
sb
.
toString
());
System
.
out
.
println
(
JSONObject
.
toJSONString
(
jo
));
if
(
jo
.
getIntValue
(
"status"
)
==
200
&&
(
JSONArray
)
jo
.
get
(
"regeocodes"
)
!=
null
&&
((
JSONArray
)
jo
.
get
(
"regeocodes"
)).
size
()
>
0
){
if
(
jo
.
getIntValue
(
"status"
)
==
200
&&
(
JSONArray
)
jo
.
get
(
"regeocodes"
)
!=
null
&&
((
JSONArray
)
jo
.
get
(
"regeocodes"
)).
size
()
>
0
)
{
String
a
=
((
JSONObject
)
((
JSONArray
)
jo
.
get
(
"regeocodes"
)).
get
(
0
)).
getString
(
"formatted_address"
);
mytll
.
setAddress
(
a
);
//该值用于控制停止进入下一地图源转换
mytll
.
setHasSuccess
(
1
);
}
else
{
}
else
{
mytll
.
setHasSuccess
(
0
);
}
return
mytll
;
...
...
src/main/resources/application.properties
View file @
1d030e23
...
...
@@ -10,5 +10,9 @@ spring.mvc.favicon.enabled=false
spring.mvc.static-path-pattern
=
/**
spring.resources.static-locations
=
classpath:/webapp/
#
ȲЧ
#
\uFFFD\u0232\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0427
spring.devtools.restart.enabled
=
true
spring.servlet.multipart.max-file-size
=
10MB
spring.servlet.multipart.max-request-size
=
10MB
src/main/webapp/index.jsp
View file @
1d030e23
...
...
@@ -106,7 +106,9 @@
})
/**
* 判断文件路径是否正确
*/
function
doSaveBg
()
{
var
localPath
=
$
(
"#fileName1"
).
val
();
var
a
=
$
(
"#isEF"
).
prop
(
"checked"
);
...
...
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