|
@@ -79,7 +79,7 @@ public class AddressQueryEngine {
|
|
|
* @param addr
|
|
|
* @return
|
|
|
*/
|
|
|
- public AddressResult commonSearchByName_nw(String addr,int sl) {
|
|
|
+ public AddressResult commonSearchByName_nw(String addr, int sl) {
|
|
|
AddressResult addressResult = new AddressResult();
|
|
|
if (!StringUtils.hasText(addr) || addr.length() < 3) {
|
|
|
addressResult.setMessage("非地址数据");
|
|
@@ -116,7 +116,7 @@ public class AddressQueryEngine {
|
|
|
addressResult.setAddrBean(addrBean);
|
|
|
|
|
|
// 优先进行数据库查询
|
|
|
- List<YyskDmdzAddressStandardization> dbPois = AreaService.getInstance().getAddressPoiOnlyDB(splitAddress,sl);
|
|
|
+ List<YyskDmdzAddressStandardization> dbPois = AreaService.getInstance().getAddressPoiOnlyDB(splitAddress, sl);
|
|
|
if (dbPois != null && dbPois.size() > 0) {
|
|
|
JSONArray pois = new JSONArray();
|
|
|
pois.addAll(dbPois);
|
|
@@ -147,6 +147,82 @@ public class AddressQueryEngine {
|
|
|
return addressResult;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /***
|
|
|
+ * 返回两个居委的方法
|
|
|
+ * @param addr
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public AddressResult commonSearchByName_nwV2(String addr, int sl) {
|
|
|
+ AddressResult addressResult = new AddressResult();
|
|
|
+ if (!StringUtils.hasText(addr) || addr.length() < 3) {
|
|
|
+ addressResult.setMessage("非地址数据");
|
|
|
+ return addressResult;
|
|
|
+ }
|
|
|
+ AddrBean lmrAddrBean = AddrSplitLmrMap.outAddrMapInAddr(addr);
|
|
|
+ if (lmrAddrBean.getRule() != null && Integer.parseInt(lmrAddrBean.getRule()) <= 0 && !addr.contains("新城区")) {
|
|
|
+ addressResult.setMessage("非上海数据");
|
|
|
+ AddressResult.ContentBean content = new AddressResult.ContentBean();
|
|
|
+ content.setSearchAddress(addr);
|
|
|
+ content.setPname(lmrAddrBean.getProvinces());
|
|
|
+ content.setCityname(lmrAddrBean.getMarket());
|
|
|
+ content.setAdname(lmrAddrBean.getStreetTown());
|
|
|
+ content.setCommunity(lmrAddrBean.getResidentialCommittee());
|
|
|
+ content.setScore("rule_0");
|
|
|
+ addressResult.setData(new ArrayList<>());
|
|
|
+ addressResult.getData().add(content);
|
|
|
+ return addressResult;
|
|
|
+ }
|
|
|
+ SplitAddress splitAddress = ShanghaiAddressSplitUtil.splitBestAddress(addr);
|
|
|
+ if (splitAddress.getStatus() == 3 && !addr.contains("新城区")) {// 不是地址
|
|
|
+ addressResult.setMessage("非地址数据");
|
|
|
+ return addressResult;
|
|
|
+ } else {
|
|
|
+ AddressResult.ContentBean addrBean = new AddressResult.ContentBean();
|
|
|
+ addrBean.setSearchAddress(addr);
|
|
|
+ addrBean.setPname(splitAddress.getProvince());
|
|
|
+ addrBean.setCityname(splitAddress.getCity());
|
|
|
+ addrBean.setDistance(splitAddress.getDistrict());
|
|
|
+ addrBean.setAdname(splitAddress.getStreet());
|
|
|
+ addrBean.setCommunity(splitAddress.getCommunity());
|
|
|
+ addrBean.setStandAddr(splitAddress.getCity() + splitAddress.getDistrict() + splitAddress.getStreet()
|
|
|
+ + splitAddress.getCommunity() + splitAddress.getAddr());
|
|
|
+ addressResult.setAddrBean(addrBean);
|
|
|
+
|
|
|
+ // 优先进行数据库查询
|
|
|
+ List<YyskDmdzAddressStandardization> dbPois = AreaService.getInstance().getAddressPoiOnlyDB(splitAddress, sl);
|
|
|
+ if (dbPois != null && dbPois.size() > 0) {
|
|
|
+ JSONArray pois = new JSONArray();
|
|
|
+ pois.addAll(dbPois);
|
|
|
+ SplitAddress splitAddress1 = ShanghaiAddressSplitUtil.splitBestAddress(addr);
|
|
|
+// 打分排序
|
|
|
+ addressResult = new TransfromDataTool().dbResultToResult(splitAddress1, addr, pois);
|
|
|
+ if (addressResult.getData() != null && addressResult.getData().size() > 0) {
|
|
|
+ getCjWgWgwByLocV2(addressResult, splitAddress);
|
|
|
+ addressResult.setCode(AddressResultEnum.DB_SUCCESS);
|
|
|
+ addressResult.setMessage("成功");
|
|
|
+ for (AddressResult.ContentBean content : addressResult.getData()) {
|
|
|
+ // 地址库中可能存在外地脏数据(后来发现可能经纬度也有点不准)
|
|
|
+ if (content.getCityname() != null && content.getAdname() != null) {
|
|
|
+ addrBean.setPname(content.getPname());
|
|
|
+ addrBean.setCityname(content.getCityname());
|
|
|
+ addrBean.setAdname(content.getAdname());
|
|
|
+ addrBean.setAdname2(content.getAdname());
|
|
|
+ addrBean.setCommunity(content.getCommunity());
|
|
|
+ addrBean.setCommunity2(content.getCommunity2());
|
|
|
+ addrBean.setStandAddr(content.getStandAddr());
|
|
|
+ addressResult.setAddrBean(addrBean);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return addressResult;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ addressResult.setMessage("失败");
|
|
|
+ return addressResult;
|
|
|
+ }
|
|
|
+
|
|
|
public static Map<String, String> initSigns() {
|
|
|
Map<String, String> headerMap = new HashMap<>();
|
|
|
String timestamp = System.currentTimeMillis() + "";
|
|
@@ -327,6 +403,60 @@ public class AddressQueryEngine {
|
|
|
}
|
|
|
|
|
|
|
|
|
+ /***
|
|
|
+ * 根据搜索地址,赋值村居、网格、微格网信息
|
|
|
+ * @param result
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public AddressResult getCjWgWgwByLocV2(AddressResult result, SplitAddress splitAddress) {
|
|
|
+ if (result == null || result.getData() == null || result.getData().size() < 1) {
|
|
|
+ return result;
|
|
|
+ } else {
|
|
|
+ AreaService areaService = AreaService.getInstance();
|
|
|
+ for (AddressResult.ContentBean content : result.getData()) {
|
|
|
+ if (content.getLat() != null && content.getLon() != null) {
|
|
|
+// 判断是否存在村居数据
|
|
|
+ GeoJsonBean cjBean = areaService.isInResidentialCommitteePolygon(content.getLon(), content.getLat());
|
|
|
+ if (cjBean != null && cjBean.getProperties() != null) {
|
|
|
+ content.setPname("上海市");
|
|
|
+ content.setCityname(cjBean.getProperties().getString("所属区"));
|
|
|
+ content.setAdname(cjBean.getProperties().getString("所属街"));
|
|
|
+ content.setCommunityCode(cjBean.getProperties().getString("居委会"));
|
|
|
+ content.setCommunity(cjBean.getProperties().getString("居委_1"));
|
|
|
+ }
|
|
|
+
|
|
|
+ GeoJsonBean cjBean2 = areaService.isInResidentialCommitteePolygonV2(content.getLon(), content.getLat());
|
|
|
+ if (cjBean2 != null && cjBean2.getProperties() != null) {
|
|
|
+ content.setAdname2(cjBean2.getProperties().getString("所属街"));
|
|
|
+ content.setCommunity2(cjBean2.getProperties().getString("居委_1"));
|
|
|
+ }
|
|
|
+ content.setStandAddr(content.getPname() + content.getCityname() + content.getAdname() + splitAddress.getAddr());
|
|
|
+ } else {
|
|
|
+ System.err.println("没有经纬度参数,不能根据经纬度落点补充街镇等信息!");
|
|
|
+ }
|
|
|
+// TODO 添加逻辑(路名等信息返回)
|
|
|
+ try {
|
|
|
+ Map<String, String> roomInfo = AddrSplitLmrMap.parseAddress(splitAddress.getAddr());
|
|
|
+ if (roomInfo != null) {
|
|
|
+ content.setRoadName(roomInfo.get("路名"));
|
|
|
+ content.setBuildingNumber(roomInfo.get("弄号"));
|
|
|
+ content.setLaneNumber(roomInfo.get("楼栋号"));
|
|
|
+ content.setRoomNumber(roomInfo.get("室号"));
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ System.err.println("getCjWgWgwByLoc方法获取路名室号等信息处理逻辑异常" + e);
|
|
|
+ }
|
|
|
+// TODO 添加逻辑,(什么都有就是没有居委编码的话,要补全居委编码)
|
|
|
+ if (StringUtils.hasText(content.getCityname()) && StringUtils.hasText(content.getCommunity()) && StringUtils.hasText(content.getAdname()) && !StringUtils.hasText(content.getCommunityCode())) {
|
|
|
+ content.setCommunityCode(AddrSplitLmrMap.outCommunityCodeByInfo(content.getCityname(), content.getAdname(), content.getCommunity()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
public AddressResult.ContentBean addContentWGWGrid(AddressResult.ContentBean content) {
|
|
|
AreaService areaService = AreaService.getInstance();
|
|
|
if (content != null && content.getLat() != null && content.getLon() != null) {
|
|
@@ -506,7 +636,7 @@ public class AddressQueryEngine {
|
|
|
|
|
|
public static String townReplaceAll(String address) {
|
|
|
address = townReplace_ct(address);
|
|
|
- return address.replaceAll("小区", "0").replaceAll("号", "0").replaceAll("弄", "0").replaceAll("室", "0").replaceAll("户", "0").replaceAll("单元", "0").replaceAll("幢", "0");
|
|
|
+ return address.replaceAll("小区", "-").replaceAll("号", "-").replaceAll("弄", "-").replaceAll("室", "-").replaceAll("户", "-").replaceAll("单元", "-").replaceAll("幢", "-");
|
|
|
}
|
|
|
|
|
|
/**
|