|
@@ -89,12 +89,12 @@ public class AreaService {
|
|
|
* 读取最新的村居geojson文件
|
|
|
* 读取数据并生成新的xlsx文件
|
|
|
*/
|
|
|
- public static void putNewXlsxCunju(){
|
|
|
+ public static void putNewXlsxCunju() {
|
|
|
String filePath = "C:\\Users\\Liumouren\\Desktop\\上海市_村居边界.geojson";
|
|
|
String outFilePath = "C:\\Users\\Liumouren\\Desktop\\上海市_村居边界.xlsx";
|
|
|
// 创建ObjectMapper实例
|
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
|
- List<Map<String,Object>> outFileDatas = new ArrayList<>();
|
|
|
+ List<Map<String, Object>> outFileDatas = new ArrayList<>();
|
|
|
try {
|
|
|
// 读取JSON文件并转换为String
|
|
|
String appendJsonContent = objectMapper.readTree(new File(filePath)).toString();
|
|
@@ -104,15 +104,15 @@ public class AreaService {
|
|
|
JSONObject featureItem = appendFeatures.getJSONObject(i);
|
|
|
// 替换属性中的key,不影响旧代码使用
|
|
|
JSONObject properties = featureItem.getJSONObject("properties");
|
|
|
- Map<String,Object> dataItem = new HashMap<>();
|
|
|
- dataItem.put("区",properties.getString("所属区"));
|
|
|
- dataItem.put("镇",properties.getString("所属街"));
|
|
|
- dataItem.put("居委",properties.getString("居委_1"));
|
|
|
- dataItem.put("居委编码",properties.getString("code"));
|
|
|
+ Map<String, Object> dataItem = new HashMap<>();
|
|
|
+ dataItem.put("区", properties.getString("所属区"));
|
|
|
+ dataItem.put("镇", properties.getString("所属街"));
|
|
|
+ dataItem.put("居委", properties.getString("居委_1"));
|
|
|
+ dataItem.put("居委编码", properties.getString("code"));
|
|
|
outFileDatas.add(dataItem);
|
|
|
}
|
|
|
try {
|
|
|
- ExcelReaderUtils.writeToExcel(outFileDatas,outFilePath);
|
|
|
+ ExcelReaderUtils.writeToExcel(outFileDatas, outFilePath);
|
|
|
System.out.println("文件保存成功!路径:" + outFilePath);
|
|
|
} catch (IOException e) {
|
|
|
System.err.println("文件保存失败:" + e.getMessage());
|
|
@@ -123,6 +123,38 @@ public class AreaService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public static void xlsxToGeojson(String geoJsonColName) {
|
|
|
+ try {
|
|
|
+ String filePath = "C:\\Users\\Liumouren\\Desktop\\楼宇数据-20250820.xlsx";
|
|
|
+ String outFilePath = "C:\\Users\\Liumouren\\Desktop\\楼宇数据-20250820.geojson";
|
|
|
+ List<Map<String, Object>> fileData = ExcelReaderUtils.readExcel(filePath);
|
|
|
+ JSONObject resData = new JSONObject();
|
|
|
+ resData.put("type", "FeatureCollection");
|
|
|
+ JSONArray allFeatures = new JSONArray();
|
|
|
+ for (Map<String, Object> item : fileData) {
|
|
|
+ String geojsonStr = item.get(geoJsonColName).toString();
|
|
|
+ JSONObject geojsonData = JSONObject.parseObject(geojsonStr);
|
|
|
+ JSONArray features = geojsonData.getJSONArray("features");
|
|
|
+ JSONObject geometryItem = features.getJSONObject(0);
|
|
|
+ for (String key : item.keySet()) {
|
|
|
+ if (!key.contains(geoJsonColName)) {
|
|
|
+ geometryItem.getJSONObject("properties").put(key, item.get(key));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ allFeatures.add(geometryItem);
|
|
|
+ }
|
|
|
+ resData.put("features", allFeatures);
|
|
|
+ // 直接将字符串写入文件,指定字符集
|
|
|
+ Files.write(
|
|
|
+ Paths.get(outFilePath), // 文件路径
|
|
|
+ JSONObject.toJSONString(resData).getBytes(StandardCharsets.UTF_8) // 字符串转字节数组(指定编码)
|
|
|
+ );
|
|
|
+ System.out.println("文件保存成功!路径:" + outFilePath);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 加载村居边界geojson文件获取所有的居委并进行统计
|
|
|
* 找出所有有问题(xx公司、xx工作站、xx区)的居委,并列出
|
|
@@ -130,7 +162,8 @@ public class AreaService {
|
|
|
* @param args
|
|
|
*/
|
|
|
public static void main(String[] args) {
|
|
|
- putNewXlsxCunju();
|
|
|
+// putNewXlsxCunju();
|
|
|
+ xlsxToGeojson("c_spatial_info");
|
|
|
/*// JSON文件路径
|
|
|
String appendFilePath = "C:\\Users\\Liumouren\\Desktop\\GWS84(国际通用)sj_jw_0416.json";
|
|
|
String filePath = "C:\\Users\\Liumouren\\Desktop\\上海市_村居边界.geojson";
|
|
@@ -433,30 +466,53 @@ public class AreaService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public List<YyskDmdzAddressStandardization> getAddressPoiOnlyDB(SplitAddress splitAddress) {
|
|
|
-// TODO 数据库查询逻辑调整为内存处理的方式
|
|
|
- String addr = splitAddress.getAddr();
|
|
|
- String addr2 = addr + "";
|
|
|
- AddrBean lmrAddrBean = AddrSplitLmrMap.outAddrMapInAddr(addr2);
|
|
|
- if (lmrAddrBean.getAddress() != null) {
|
|
|
- addr2 = lmrAddrBean.getAddress();
|
|
|
- }
|
|
|
+ /**
|
|
|
+ * 兼容查询处理
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<YyskDmdzAddressStandardization> getDmdzAddressByRoadInfos(String addr2) {
|
|
|
+ List<YyskDmdzAddressStandardization> returnDatas = new ArrayList<>();
|
|
|
Map<String, String> roadInfos = AddrSplitLmrMap.parseAddress(addr2);
|
|
|
if (roadInfos != null && roadInfos.containsKey("路名") && roadInfos.get("路名") != null && StringUtils.hasText(roadInfos.get("路名"))) {
|
|
|
- addr2 = roadInfos.get("路名") + (StringUtils.hasText(roadInfos.get("弄号")) ? roadInfos.get("弄号") : "");
|
|
|
- }
|
|
|
- List<YyskDmdzAddressStandardization> returnDatas = new ArrayList<>();
|
|
|
- if (ScheduledTasks.allDmdzData.containsKey(addr2)) {
|
|
|
- returnDatas = ScheduledTasks.allDmdzData.get(addr2);
|
|
|
+ addr2 = roadInfos.get("路名") + (StringUtils.hasText(roadInfos.get("弄号")) ? roadInfos.get("弄号") : "") + (StringUtils.hasText(roadInfos.get("楼栋号")) ? roadInfos.get("楼栋号") : "");
|
|
|
+ if (ScheduledTasks.allDmdzData.containsKey(addr2)) {
|
|
|
+ returnDatas = ScheduledTasks.allDmdzData.get(addr2);
|
|
|
+ } else {
|
|
|
+ addr2 = roadInfos.get("路名") + (StringUtils.hasText(roadInfos.get("弄号")) ? roadInfos.get("弄号") : "");
|
|
|
+ if (ScheduledTasks.allDmdzData.containsKey(addr2)) {
|
|
|
+ returnDatas = ScheduledTasks.allDmdzData.get(addr2);
|
|
|
+ } else {
|
|
|
+ for (String key : ScheduledTasks.allDmdzData.keySet()) {
|
|
|
+// TODO 地址库有离谱的骚东西
|
|
|
+ if (key != null && key.contains(addr2)) {
|
|
|
+ returnDatas.addAll(ScheduledTasks.allDmdzData.get(key));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
} else {
|
|
|
for (String key : ScheduledTasks.allDmdzData.keySet()) {
|
|
|
-// TODO 地址库有离谱的骚东西
|
|
|
- if (key != null && addr != null && key.contains(addr2)) {
|
|
|
+// TODO 地址库有离谱的骚东西
|
|
|
+ if (key != null && addr2 != null && key.contains(addr2)) {
|
|
|
returnDatas.addAll(ScheduledTasks.allDmdzData.get(key));
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ return returnDatas;
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<YyskDmdzAddressStandardization> getAddressPoiOnlyDB(SplitAddress splitAddress) {
|
|
|
+// TODO 数据库查询逻辑调整为内存处理的方式
|
|
|
+ String addr = splitAddress.getAddr();
|
|
|
+ String addr2 = addr + "";
|
|
|
+ AddrBean lmrAddrBean = AddrSplitLmrMap.outAddrMapInAddr(addr2);
|
|
|
+ if (lmrAddrBean.getAddress() != null) {
|
|
|
+ addr2 = lmrAddrBean.getAddress();
|
|
|
+ }
|
|
|
+ List<YyskDmdzAddressStandardization> returnDatas = getDmdzAddressByRoadInfos(addr2);
|
|
|
// 对于区的精准查询
|
|
|
List<YyskDmdzAddressStandardization> returnDatas2 = new ArrayList<>();
|
|
|
if (StringUtils.hasText(splitAddress.getDistrict())) {
|