|
@@ -16,8 +16,6 @@ import java.util.ArrayList;
|
|
|
import java.util.HashSet;
|
|
|
import java.util.List;
|
|
|
import java.util.Set;
|
|
|
-import java.util.regex.Matcher;
|
|
|
-import java.util.regex.Pattern;
|
|
|
|
|
|
public class AddressQueryEngine {
|
|
|
|
|
@@ -35,12 +33,6 @@ public class AddressQueryEngine {
|
|
|
|
|
|
private WDToken wdToken = null;
|
|
|
|
|
|
- public static void main(String[] args) {
|
|
|
- String[] address = new String[]{"未来城"};
|
|
|
- AddressResult addressResult = AddressQueryEngine.getInstance().commonSearchByName(address, AddressLevel.values()[1]);
|
|
|
- System.out.println(addressResult);
|
|
|
- }
|
|
|
-
|
|
|
/***
|
|
|
* 单条地名搜索通用方法,搜索顺序 1. 武大吉奥; 2. 市四中心; 3. 高德搜索; 4. 高德高级搜索;
|
|
|
* @param addrs
|
|
@@ -52,8 +44,8 @@ public class AddressQueryEngine {
|
|
|
* 5. 结果与基准数据完全一致,则使用。
|
|
|
* @return
|
|
|
*/
|
|
|
- public AddressResult commonSearchByName(String[] addrs, AddressLevel level) {
|
|
|
- if (addrs == null || addrs.length < 1) {
|
|
|
+ public AddressResult commonSearchByName(List<String> addrs, AddressLevel level) {
|
|
|
+ if (addrs == null || addrs.size() < 1) {
|
|
|
return null;
|
|
|
}
|
|
|
AddressResult addressResult = new AddressResult();
|
|
@@ -84,7 +76,7 @@ public class AddressQueryEngine {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- if (addressResult.getData() == null || addressResult.getData().size() == 0) {
|
|
|
+ /*if (addressResult.getData() == null || addressResult.getData().size() == 0) {
|
|
|
for (String addr : addrs) {
|
|
|
AddressResult.ContentBean contentBean = verificaData(gdSearchByName(addr), level, addr);
|
|
|
if (contentBean != null) {
|
|
@@ -95,8 +87,8 @@ public class AddressQueryEngine {
|
|
|
return getCjWgWgwByLoc(addressResult);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- if (addressResult.getData() == null || addressResult.getData().size() == 0) {
|
|
|
+ }*/
|
|
|
+ /*if (addressResult.getData() == null || addressResult.getData().size() == 0) {
|
|
|
for (String addr : addrs) {
|
|
|
AddressResult.ContentBean contentBean = verificaData(gdV3SearchByName(addr), level, addr);
|
|
|
if (contentBean != null) {
|
|
@@ -107,7 +99,7 @@ public class AddressQueryEngine {
|
|
|
return getCjWgWgwByLoc(addressResult);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
+ }*/
|
|
|
addressResult.setCode(AddressResultEnum.RESULT_NULL);
|
|
|
addressResult.setMessage("失败");
|
|
|
return addressResult;
|
|
@@ -165,7 +157,7 @@ public class AddressQueryEngine {
|
|
|
return AddressTools.getInstance().faildQuery(AddressResultEnum.DATA_FROMAT_FAILD, "格式化失败");
|
|
|
}
|
|
|
} else {
|
|
|
- System.out.println("地址" + address + "未查询到数据!");
|
|
|
+ System.out.println("地址[" + address + "]未查询到数据!");
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
@@ -197,15 +189,19 @@ public class AddressQueryEngine {
|
|
|
public AddressResult gdSearchByName(String address) {
|
|
|
String geoUrl = Constant.AMAP_GEO_URL + "?key=" + Constant.AMAP_KEY + "&address=" + address + "&city=" + Constant.getAMAP_CITY_CODE() + "&output=JSON";
|
|
|
ResponseEntity response = AddressNetTools.getInstance().requestGet(geoUrl, null, null);
|
|
|
- String body = response.getBody() + "";
|
|
|
- if (!StringUtils.hasText(body))
|
|
|
- return AddressTools.getInstance().faildQuery(AddressResultEnum.RESULT_NULL, "搜索无结果");
|
|
|
- try {
|
|
|
- JSONObject json = JSONObject.parseObject(body);
|
|
|
- return TransfromDataTool.gdResultToResult(json);
|
|
|
- } catch (Exception e) {
|
|
|
- System.err.println(e);
|
|
|
- return AddressTools.getInstance().faildQuery(AddressResultEnum.DATA_FROMAT_FAILD, "格式化失败");
|
|
|
+ if (response != null && response.getBody() != null) {
|
|
|
+ String body = response.getBody() + "";
|
|
|
+ if (!StringUtils.hasText(body))
|
|
|
+ return AddressTools.getInstance().faildQuery(AddressResultEnum.RESULT_NULL, "搜索无结果");
|
|
|
+ try {
|
|
|
+ JSONObject json = JSONObject.parseObject(body);
|
|
|
+ return TransfromDataTool.gdResultToResult(json);
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.err.println(e);
|
|
|
+ return AddressTools.getInstance().faildQuery(AddressResultEnum.DATA_FROMAT_FAILD, "格式化失败");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -216,37 +212,48 @@ public class AddressQueryEngine {
|
|
|
*/
|
|
|
public AddressResult gdV3SearchByName(String address) {
|
|
|
String geoUrl =
|
|
|
-// + Constant.AMAP_SEARCH_TYPES 070500
|
|
|
Constant.AMAP_SEARCH_NAME_V3 + "?key=" + Constant.AMAP_KEY + "&types=" + Constant.AMAP_SEARCH_TYPES +
|
|
|
"&keywords=" + address + "&city=" + Constant.getAMAP_CITY_CODE() + "&offset=20";
|
|
|
- System.out.println("geoUrl:" + geoUrl);
|
|
|
- String body = null;
|
|
|
- body = AddressNetTools.getInstance().requestGet(geoUrl, null, null).getBody() + "";
|
|
|
- if (!StringUtils.hasText(body)) {
|
|
|
- return AddressTools.getInstance().faildQuery(AddressResultEnum.RESULT_NULL, "搜索无结果");
|
|
|
- }
|
|
|
- JSONArray pois = new JSONArray();
|
|
|
- JSONObject json = JSONObject.parseObject(body);
|
|
|
- pois.addAll(json.getJSONArray("pois"));
|
|
|
-
|
|
|
- int count = Integer.valueOf(json.get("count") + "");
|
|
|
- if (count > 20) {
|
|
|
- for (int i = 2; i < (count % 20 + 1); i++) {
|
|
|
- geoUrl =
|
|
|
- Constant.AMAP_SEARCH_NAME_V3 + "?key=" + Constant.AMAP_KEY + "&types=" + Constant.AMAP_SEARCH_TYPES +
|
|
|
- "&keywords=" + address + "&city=" + Constant.getAMAP_CITY_CODE() + "&offset=20&page=" + i;
|
|
|
- body = AddressNetTools.getInstance().requestGet(geoUrl, null, null).getBody() + "";
|
|
|
- if (!StringUtils.hasText(body)) {
|
|
|
- return AddressTools.getInstance().faildQuery(AddressResultEnum.RESULT_AGAIN_NULL, "多次搜索无结果");
|
|
|
+ ResponseEntity responseEntity = AddressNetTools.getInstance().requestGet(geoUrl, null, null);
|
|
|
+ if (responseEntity.hasBody()) {
|
|
|
+ String body = responseEntity.getBody() + "";
|
|
|
+ if (!StringUtils.hasText(body)) {
|
|
|
+ return AddressTools.getInstance().faildQuery(AddressResultEnum.RESULT_NULL, "搜索无结果");
|
|
|
+ }
|
|
|
+ JSONArray pois = new JSONArray();
|
|
|
+ JSONObject json = JSONObject.parseObject(body);
|
|
|
+ if (json.containsKey("pois")) {
|
|
|
+ pois.addAll(json.getJSONArray("pois"));
|
|
|
+ }
|
|
|
+ if (json.containsKey("count")) {
|
|
|
+ int count = Integer.parseInt(json.get("count") + "");
|
|
|
+ if (count > 20) {
|
|
|
+ for (int i = 2; i < (count % 20 + 1); i++) {
|
|
|
+ geoUrl =
|
|
|
+ Constant.AMAP_SEARCH_NAME_V3 + "?key=" + Constant.AMAP_KEY + "&types=" + Constant.AMAP_SEARCH_TYPES +
|
|
|
+ "&keywords=" + address + "&city=" + Constant.getAMAP_CITY_CODE() + "&offset=20&page=" + i;
|
|
|
+ ResponseEntity responseEntity2 = AddressNetTools.getInstance().requestGet(geoUrl, null, null);
|
|
|
+ if (responseEntity2.hasBody()) {
|
|
|
+ body = responseEntity2.getBody() + "";
|
|
|
+ }
|
|
|
+ if (!StringUtils.hasText(body)) {
|
|
|
+ return AddressTools.getInstance().faildQuery(AddressResultEnum.RESULT_AGAIN_NULL, "多次搜索无结果");
|
|
|
+ }
|
|
|
+ JSONObject json2 = JSONObject.parseObject(body);
|
|
|
+ if (json2.containsKey(pois)) {
|
|
|
+ pois.addAll(JSONObject.parseObject(body).getJSONArray("pois"));
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- pois.addAll(JSONObject.parseObject(body).getJSONArray("pois"));
|
|
|
}
|
|
|
- }
|
|
|
- try {
|
|
|
- return TransfromDataTool.gdV3ResultToResult(pois);
|
|
|
- } catch (Exception e) {
|
|
|
- System.err.println(e);
|
|
|
- return AddressTools.getInstance().faildQuery(AddressResultEnum.DATA_FROMAT_FAILD, "格式化失败");
|
|
|
+ try {
|
|
|
+ return TransfromDataTool.gdV3ResultToResult(pois);
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.err.println(e);
|
|
|
+ return AddressTools.getInstance().faildQuery(AddressResultEnum.DATA_FROMAT_FAILD, "格式化失败");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return AddressTools.getInstance().faildQuery(AddressResultEnum.RESULT_AGAIN_NULL, "高德V3分页查询无结果");
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -262,12 +269,19 @@ public class AddressQueryEngine {
|
|
|
} else {
|
|
|
AreaService areaService = AreaService.getInstance();
|
|
|
for (AddressResult.ContentBean content : result.getData()) {
|
|
|
- GeoJsonBean cjBean = areaService.isInCJPolygon(content.getLon(), content.getLat());
|
|
|
- content.setCjJson(cjBean == null ? new JSONObject() : cjBean.getProperties());
|
|
|
- GeoJsonBean gridBean = areaService.isInGridPolygon(content.getLon(), content.getLat());
|
|
|
- content.setWgwJson(gridBean == null ? new JSONObject() : gridBean.getProperties());
|
|
|
- GeoJsonBean wgridBean = areaService.isInWGridPolygon(content.getLon(), content.getLat());
|
|
|
- content.setWgwJson(wgridBean == null ? new JSONObject() : wgridBean.getProperties());
|
|
|
+ if (content.getLat() != null && content.getLon() != null) {
|
|
|
+ // TODO 松江的话只跑行政区划和街镇
|
|
|
+ /*GeoJsonBean cjBean = areaService.isInCJPolygon(content.getLon(), content.getLat());
|
|
|
+ content.setCjJson(cjBean == null ? new JSONObject() : cjBean.getProperties());
|
|
|
+ GeoJsonBean gridBean = areaService.isInGridPolygon(content.getLon(), content.getLat());
|
|
|
+ content.setWgwJson(gridBean == null ? new JSONObject() : gridBean.getProperties());
|
|
|
+ GeoJsonBean wgridBean = areaService.isInWGridPolygon(content.getLon(), content.getLat());
|
|
|
+ content.setWgwJson(wgridBean == null ? new JSONObject() : wgridBean.getProperties());*/
|
|
|
+ GeoJsonBean adBean = areaService.isInadPolygon(content.getLon(), content.getLat());
|
|
|
+ content.setAdJson(adBean == null ? new JSONObject() : adBean.getProperties());
|
|
|
+ GeoJsonBean townBean = areaService.isInTownPolygon(content.getLon(), content.getLat());
|
|
|
+ content.setTownJson(townBean == null ? new JSONObject() : townBean.getProperties());
|
|
|
+ }
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
@@ -303,10 +317,12 @@ public class AddressQueryEngine {
|
|
|
if (result != null && result.getData() != null && result.getData().size() > 0) {
|
|
|
List<AddressResult.ContentBean> contentBean = result.getData();
|
|
|
for (AddressResult.ContentBean contentBean1 : contentBean) {
|
|
|
- String address = addressReplaceAll(contentBean1.getAddress());
|
|
|
- String address2 = addressReplaceAll(addr);
|
|
|
- if (isNotEmptyOrBlank(address) && (address.contains(address2) || address2.contains(address))) {
|
|
|
- return contentBean1;
|
|
|
+ if (contentBean1.getAddress() != null) {
|
|
|
+ String address = townReplaceAll(addressReplaceAll(contentBean1.getAddress()));
|
|
|
+ String address2 = townReplaceAll(addressReplaceAll(addr));
|
|
|
+ if (isNotEmptyOrBlank(address) && address.contains(address2)) {
|
|
|
+ return contentBean1;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
@@ -318,15 +334,17 @@ public class AddressQueryEngine {
|
|
|
if (result != null && result.getData() != null && result.getData().size() > 0) {
|
|
|
List<AddressResult.ContentBean> contentBean = result.getData();
|
|
|
for (AddressResult.ContentBean contentBean1 : contentBean) {
|
|
|
- Set<String> address = tokenizeString(contentBean1.getAddress()).get(1);
|
|
|
- if (address != null && address.size() > 1) {
|
|
|
- Set<String> address2 = tokenizeString(addr).get(1);
|
|
|
- int addressSize = address.size();
|
|
|
- for (String addr2 : address2) {
|
|
|
- if (address.contains(addr2)) {
|
|
|
- addressSize--;
|
|
|
- if (addressSize == 0) {
|
|
|
- return contentBean1;
|
|
|
+ if (contentBean1.getAddress() != null) {
|
|
|
+ Set<String> address = tokenizeString(contentBean1.getAddress()).get(1);
|
|
|
+ if (address != null && address.size() > 1) {
|
|
|
+ Set<String> address2 = tokenizeString(addr).get(1);
|
|
|
+ int addressSize = address.size();
|
|
|
+ for (String addr2 : address2) {
|
|
|
+ if (address.contains(addr2)) {
|
|
|
+ addressSize--;
|
|
|
+ if (addressSize == 0) {
|
|
|
+ return contentBean1;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -341,22 +359,24 @@ public class AddressQueryEngine {
|
|
|
if (result != null && result.getData() != null && result.getData().size() > 0) {
|
|
|
List<AddressResult.ContentBean> contentBean = result.getData();
|
|
|
for (AddressResult.ContentBean contentBean1 : contentBean) {
|
|
|
- Set<String> addressString = tokenizeString(contentBean1.getAddress()).get(0);
|
|
|
- Set<String> addressNumber = tokenizeString(contentBean1.getAddress()).get(1);
|
|
|
- Set<String> address2String = tokenizeString(addr).get(0);
|
|
|
- Set<String> address2Number = tokenizeString(addr).get(1);
|
|
|
- if (addressString != null && addressString.size() > 1) {
|
|
|
- int addressStrSize = addressString.size();
|
|
|
- for (String addr2str : address2String) {
|
|
|
- if (addressString.contains(addr2str)) {
|
|
|
- addressStrSize--;
|
|
|
- if (addressStrSize == 0) {
|
|
|
- int addressNumSize = addressNumber.size();
|
|
|
- for (String addr2Num : address2Number) {
|
|
|
- if (addressNumber.contains(addr2Num)) {
|
|
|
- addressNumSize--;
|
|
|
- if (addressNumSize == 0) {
|
|
|
- return contentBean1;
|
|
|
+ if (contentBean1.getAddress() != null) {
|
|
|
+ Set<String> addressString = tokenizeString(contentBean1.getAddress()).get(0);
|
|
|
+ Set<String> addressNumber = tokenizeString(contentBean1.getAddress()).get(1);
|
|
|
+ Set<String> address2String = tokenizeString(addr).get(0);
|
|
|
+ Set<String> address2Number = tokenizeString(addr).get(1);
|
|
|
+ if (addressString != null && addressString.size() > 1) {
|
|
|
+ int addressStrSize = addressString.size();
|
|
|
+ for (String addr2str : address2String) {
|
|
|
+ if (addressString.contains(addr2str)) {
|
|
|
+ addressStrSize--;
|
|
|
+ if (addressStrSize == 0) {
|
|
|
+ int addressNumSize = addressNumber.size();
|
|
|
+ for (String addr2Num : address2Number) {
|
|
|
+ if (addressNumber.contains(addr2Num)) {
|
|
|
+ addressNumSize--;
|
|
|
+ if (addressNumSize == 0) {
|
|
|
+ return contentBean1;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -374,10 +394,12 @@ public class AddressQueryEngine {
|
|
|
if (result != null && result.getData() != null && result.getData().size() > 0) {
|
|
|
List<AddressResult.ContentBean> contentBean = result.getData();
|
|
|
for (AddressResult.ContentBean contentBean1 : contentBean) {
|
|
|
- String address = addressReplaceAll(contentBean1.getAddress());
|
|
|
- String address2 = addressReplaceAll(addr);
|
|
|
- if (isNotEmptyOrBlank(address) && address.equals(address2)) {
|
|
|
- return contentBean1;
|
|
|
+ if (contentBean1.getAddress() != null) {
|
|
|
+ String address = addressReplaceAll(contentBean1.getAddress());
|
|
|
+ String address2 = addressReplaceAll(addr);
|
|
|
+ if (isNotEmptyOrBlank(address) && address.equals(address2)) {
|
|
|
+ return contentBean1;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
} else {
|