feature(地址清洗):地址清洗开发
1. 地址分为3类(单套、楼栋、小区、包含多个楼栋或者单套) 2. 基于联城数库中的路名拆分,保证联城中的路名完全匹配; 3. 联城数库中的小区路名清洗(XX路、XX大道)
This commit is contained in:
parent
d552b7da05
commit
b80679e94e
@ -43,7 +43,7 @@ public class CleanAddress {
|
||||
* 楼层
|
||||
* (和地下有关系)
|
||||
*/
|
||||
private Integer floor;
|
||||
private String floor;
|
||||
/**
|
||||
* 小区地址
|
||||
*/
|
||||
@ -67,9 +67,11 @@ public class CleanAddress {
|
||||
/**
|
||||
* 多个地址
|
||||
*/
|
||||
private List<PartialAddress> addressList;
|
||||
|
||||
private List<PartialAddress> addressList = new LinkedList<>();
|
||||
|
||||
/**
|
||||
* 是否包含特殊字符
|
||||
*/
|
||||
private Boolean containsSpecialChar;
|
||||
|
||||
private static List<String> specialChar = new LinkedList<>();
|
||||
@ -144,11 +146,11 @@ public class CleanAddress {
|
||||
this.communityName = communityName;
|
||||
}
|
||||
|
||||
public Integer getFloor() {
|
||||
public String getFloor() {
|
||||
return floor;
|
||||
}
|
||||
|
||||
public void setFloor(Integer floor) {
|
||||
public void setFloor(String floor) {
|
||||
this.floor = floor;
|
||||
}
|
||||
|
||||
@ -188,8 +190,8 @@ public class CleanAddress {
|
||||
return addressList;
|
||||
}
|
||||
|
||||
public void setAddressList(List<PartialAddress> addressList) {
|
||||
this.addressList = addressList;
|
||||
public void addAddress(PartialAddress partialAddress) {
|
||||
this.addressList.add(partialAddress);
|
||||
}
|
||||
|
||||
public Boolean getIndependent() {
|
||||
@ -218,4 +220,24 @@ public class CleanAddress {
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "CleanAddress{" +
|
||||
"rawAddress='" + rawAddress + '\'' +
|
||||
", district='" + district + '\'' +
|
||||
", region='" + region + '\'' +
|
||||
", block='" + block + '\'' +
|
||||
", road='" + road + '\'' +
|
||||
", communityName='" + communityName + '\'' +
|
||||
", floor=" + floor +
|
||||
", communityAddress=" + communityAddress +
|
||||
", buildingAddress=" + buildingAddress +
|
||||
", condoAddress=" + condoAddress +
|
||||
", propertyType='" + propertyType + '\'' +
|
||||
", independent=" + independent +
|
||||
", addressList=" + addressList +
|
||||
", containsSpecialChar=" + containsSpecialChar +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,12 @@
|
||||
package com.ruoyi.project.tool.address.model;
|
||||
|
||||
import com.ruoyi.common.utils.LoadUtil;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* 清洗地址构建
|
||||
@ -15,7 +18,18 @@ public class CleanAddressBuilder {
|
||||
private Map<String, String> districtMap = LoadUtil.loadDict("address-dict/district.dict");
|
||||
private List<String> regionList = LoadUtil.loadList("address-dict/region.dict");
|
||||
private List<String> blockList = LoadUtil.loadList("address-dict/block.dict");
|
||||
private List<String> roadList = LoadUtil.loadList("address-dict/road.dict");
|
||||
private CleanAddress cleanAddress;
|
||||
private static final int DISTRICT_LENGTH = 8;
|
||||
private static final String SHANGHAI_SHI = "上海市";
|
||||
private static final String SHANGHAI = "上海";
|
||||
private static final String SHANG = "上";
|
||||
private static final String HAO = "号";
|
||||
private static final String SHANG_SHANG = "上上";
|
||||
private static final String SHI_PATTERN = "([\\dA-Za-z]+)(室?)$";
|
||||
private static final String CHINESE_FLOOR_PATTERN = "([一二三四五六七八九十]+)层";
|
||||
private static final String NUMBER_FLOOR_PATTERN = "(\\d+)层";
|
||||
private static final String HAO_PATTERN = "([\\dA-Za-z]+)号";
|
||||
|
||||
private CleanAddressBuilder(CleanAddress cleanAddress) {
|
||||
this.cleanAddress = cleanAddress;
|
||||
@ -31,14 +45,26 @@ public class CleanAddressBuilder {
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public void parseDistrict() {
|
||||
String shanghaiAndDistrict = "上" + cleanAddress.getBoundAddress().substring(0, 7).replace("上上", "");
|
||||
public CleanAddressBuilder parseDistrict() {
|
||||
String shanghaiAndDistrict = null;
|
||||
if (cleanAddress.getBoundAddress().length() >= DISTRICT_LENGTH) {
|
||||
shanghaiAndDistrict = (SHANG + cleanAddress.getBoundAddress().substring(0, 7)).replace(SHANG_SHANG, SHANG);
|
||||
} else {
|
||||
shanghaiAndDistrict = (SHANG + cleanAddress.getBoundAddress()).replace(SHANG_SHANG, SHANG);
|
||||
}
|
||||
|
||||
//
|
||||
if (!shanghaiAndDistrict.startsWith(SHANGHAI_SHI) && !shanghaiAndDistrict.startsWith(SHANGHAI) && shanghaiAndDistrict.startsWith(SHANG)) {
|
||||
shanghaiAndDistrict = shanghaiAndDistrict.substring(1, shanghaiAndDistrict.length() - 1);
|
||||
}
|
||||
|
||||
for (Map.Entry<String, String> district : districtMap.entrySet()) {
|
||||
if (shanghaiAndDistrict.startsWith(district.getKey())) {
|
||||
cleanAddress.setDistrict(district.getKey());
|
||||
cleanAddress.setDistrict(district.getValue());
|
||||
break;
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -46,44 +72,156 @@ public class CleanAddressBuilder {
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public void parseRegion() {
|
||||
public CleanAddressBuilder parseRegion() {
|
||||
for (int i = 0; i < regionList.size(); i++) {
|
||||
if (-1 != cleanAddress.getBoundAddress().indexOf(regionList.get(i))) {
|
||||
cleanAddress.setRegion(regionList.get(i));
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析板块
|
||||
*/
|
||||
public void parseBlock() {
|
||||
public CleanAddressBuilder parseBlock() {
|
||||
for (int i = 0; i < blockList.size(); i++) {
|
||||
if (-1 != cleanAddress.getBoundAddress().indexOf(blockList.get(i))) {
|
||||
cleanAddress.setBlock(regionList.get(i));
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析路(可能缺失“路”)
|
||||
*/
|
||||
public void parseRoad() {
|
||||
public CleanAddressBuilder parseRoad() {
|
||||
for (int i = 0; i < roadList.size(); i++) {
|
||||
if (-1 != cleanAddress.getBoundAddress().indexOf(roadList.get(i))) {
|
||||
cleanAddress.setRoad(roadList.get(i));
|
||||
}
|
||||
}
|
||||
//
|
||||
if (StringUtils.isEmpty(cleanAddress.getRoad())) {
|
||||
for (int i = 0; i < roadList.size(); i++) {
|
||||
// 砍掉“路”
|
||||
String noRoad = roadList.get(i);
|
||||
if (noRoad.endsWith("路")) {
|
||||
noRoad = noRoad.substring(0, noRoad.length() - 1);
|
||||
}
|
||||
|
||||
if (-1 != cleanAddress.getBoundAddress().indexOf(noRoad)) {
|
||||
cleanAddress.setRoad(noRoad);
|
||||
}
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析小区名称(路名和小区名称重定义)
|
||||
*/
|
||||
public void parseCommunityName() {
|
||||
|
||||
public CleanAddressBuilder parseCommunityName() {
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 是否独栋?“全”“全幢”
|
||||
* 别墅?
|
||||
*/
|
||||
public void parseIndependent() {
|
||||
public CleanAddressBuilder parseIndependent() {
|
||||
Pattern shiPattern = Pattern.compile(SHI_PATTERN);
|
||||
Matcher matcher = shiPattern.matcher(cleanAddress.getBoundAddress());
|
||||
if (matcher.find()) {
|
||||
getCondoAddress();
|
||||
cleanAddress.setIndependent(Boolean.FALSE);
|
||||
} else {
|
||||
cleanAddress.setIndependent(Boolean.TRUE);
|
||||
}
|
||||
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析地址
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public void parseAddress() {
|
||||
getCondoAddress();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取楼层
|
||||
*/
|
||||
private void getFloorText() {
|
||||
Pattern pattern = Pattern.compile(CHINESE_FLOOR_PATTERN);
|
||||
Matcher matcher = pattern.matcher(cleanAddress.getBoundAddress());
|
||||
if (matcher.find()) {
|
||||
cleanAddress.setFloor(matcher.group(1));
|
||||
return;
|
||||
}
|
||||
pattern = Pattern.compile(NUMBER_FLOOR_PATTERN);
|
||||
matcher = pattern.matcher(cleanAddress.getBoundAddress());
|
||||
if (matcher.find()) {
|
||||
cleanAddress.setFloor(matcher.group(1));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 小区地址
|
||||
*/
|
||||
private void getCommunityAddress(String buildingAddressText) {
|
||||
// 只有号、号号,弄(支弄)号
|
||||
Pattern pattern = Pattern.compile(HAO_PATTERN);
|
||||
Matcher matcher = pattern.matcher(buildingAddressText);
|
||||
if (matcher.find()) {
|
||||
String communityText = buildingAddressText.replace(matcher.group(0), "");
|
||||
CommunityAddress communityAddress = new CommunityAddress(communityText);
|
||||
this.cleanAddress.addAddress(communityAddress);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取清洗地址
|
||||
*/
|
||||
private void getCondoAddress() {
|
||||
getFloorText();
|
||||
// 有路
|
||||
if (!StringUtils.isEmpty(cleanAddress.getRoad())) {
|
||||
int roadIndex = cleanAddress.getBoundAddress().indexOf(cleanAddress.getRoad());
|
||||
String condoAddressText =
|
||||
cleanAddress.getBoundAddress().substring(roadIndex);
|
||||
|
||||
// 单套
|
||||
CondoAddress condoAddress = new CondoAddress(condoAddressText);
|
||||
cleanAddress.setCondoAddress(condoAddress);
|
||||
cleanAddress.addAddress(condoAddress);
|
||||
|
||||
int haoIndex = condoAddressText.lastIndexOf(HAO);
|
||||
String buildingAddressText = condoAddressText.substring(0, haoIndex + 1);
|
||||
BuildingAddress buildingAddress = new BuildingAddress(buildingAddressText);
|
||||
// 楼栋
|
||||
cleanAddress.setBuildingAddress(buildingAddress);
|
||||
cleanAddress.addAddress(condoAddress);
|
||||
cleanAddress.addAddress(buildingAddress);
|
||||
|
||||
cleanAddress.addAddress(condoAddress);
|
||||
cleanAddress.addAddress(buildingAddress);
|
||||
getCommunityAddress(buildingAddressText);
|
||||
} else if (!StringUtils.isEmpty(cleanAddress.getCommunityName())) {
|
||||
|
||||
} else {
|
||||
// 没有路,没有小区
|
||||
}
|
||||
|
||||
// 从路找到最后面。
|
||||
// 把室号去掉
|
||||
// 把号去掉
|
||||
// 单套地址、楼栋地址、小区地址
|
||||
}
|
||||
}
|
||||
|
@ -13,19 +13,13 @@ public class CondoAddress extends PartialAddress {
|
||||
|
||||
public CondoAddress(String address) {
|
||||
super(address);
|
||||
this.shi = parseShi();
|
||||
this.floor = parseFloor();
|
||||
this.hao = parseHAO();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PartialAddress> getPartialAddress() {
|
||||
Pattern pattern = Pattern.compile(SHI_PATTERN);
|
||||
Matcher matcher = pattern.matcher(this.address);
|
||||
// 这个需要优化,地下层没有考虑
|
||||
if (matcher.find()) {
|
||||
this.shi = parseShi();
|
||||
this.floor = parseFloor();
|
||||
this.hao = parseHAO();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -102,4 +102,12 @@ public abstract class PartialAddress {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "PartialAddress{" +
|
||||
"hao='" + hao + '\'' +
|
||||
", shi='" + shi + '\'' +
|
||||
", floor=" + floor +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
@ -13,6 +13,12 @@ public class NoSignalAddressHandler implements AddressHandler {
|
||||
|
||||
@Override
|
||||
public void clear(CleanAddress cleanAddress) {
|
||||
CleanAddressBuilder.builder(cleanAddress).parseDistrict();
|
||||
CleanAddressBuilder.builder(cleanAddress)
|
||||
.parseDistrict()
|
||||
.parseRegion()
|
||||
.parseBlock()
|
||||
.parseRoad()
|
||||
.parseIndependent()
|
||||
.parseAddress();
|
||||
}
|
||||
}
|
||||
|
@ -1,70 +1,70 @@
|
||||
宝山
|
||||
宝山区
|
||||
长宁
|
||||
长宁区
|
||||
崇明
|
||||
崇明区
|
||||
奉贤
|
||||
奉贤区
|
||||
虹口
|
||||
虹口区
|
||||
黄浦
|
||||
黄浦区
|
||||
嘉定
|
||||
嘉定区
|
||||
金山
|
||||
金山区
|
||||
静安
|
||||
静安区
|
||||
卢湾
|
||||
闵行
|
||||
闵行区
|
||||
普陀
|
||||
普陀区
|
||||
浦东
|
||||
浦东南汇
|
||||
浦东新区
|
||||
青浦
|
||||
青浦区
|
||||
上海市宝山
|
||||
上海市宝山区
|
||||
上海市长宁
|
||||
上海市长宁区
|
||||
上海市崇明
|
||||
上海市崇明区
|
||||
上海市奉贤
|
||||
上海市奉贤区
|
||||
上海市虹口
|
||||
上海市虹口区
|
||||
上海市黄浦
|
||||
上海市黄浦区
|
||||
上海市嘉定
|
||||
上海市嘉定区
|
||||
上海市金山
|
||||
上海市金山区
|
||||
上海市静安
|
||||
上海市静安区
|
||||
上海市卢湾区
|
||||
上海市闵行
|
||||
上海市闵行区
|
||||
上海市南汇区
|
||||
上海市普陀
|
||||
上海市普陀区
|
||||
上海市浦东
|
||||
上海市浦东新区
|
||||
上海市青浦
|
||||
上海市青浦区
|
||||
上海市松江
|
||||
上海市松江区
|
||||
上海市徐汇
|
||||
上海市徐汇区
|
||||
上海市杨浦
|
||||
上海市杨浦区
|
||||
上海市闸北区
|
||||
松江
|
||||
松江区
|
||||
徐汇
|
||||
徐汇区
|
||||
杨浦
|
||||
杨浦区
|
||||
闸北
|
||||
上海市浦东新区 浦东
|
||||
上海市宝山区 宝山
|
||||
上海市长宁区 长宁
|
||||
上海市崇明区 崇明
|
||||
上海市奉贤区 奉贤
|
||||
上海市虹口区 虹口
|
||||
上海市黄浦区 黄浦
|
||||
上海市嘉定区 嘉定
|
||||
上海市金山区 金山
|
||||
上海市静安区 静安
|
||||
上海市卢湾区 卢湾
|
||||
上海市闵行区 闵行
|
||||
上海市南汇区 浦东
|
||||
上海市普陀区 普陀
|
||||
上海市青浦区 青浦
|
||||
上海市松江区 松江
|
||||
上海市徐汇区 徐汇
|
||||
上海市杨浦区 杨浦
|
||||
上海市闸北区 闸北
|
||||
上海市宝山 宝山
|
||||
上海市长宁 长宁
|
||||
上海市崇明 崇明
|
||||
上海市奉贤 奉贤
|
||||
上海市虹口 虹口
|
||||
上海市黄浦 黄浦
|
||||
上海市嘉定 嘉定
|
||||
上海市金山 金山
|
||||
上海市静安 静安
|
||||
上海市闵行 闵行
|
||||
上海市普陀 普陀
|
||||
上海市浦东 浦东
|
||||
上海市青浦 青浦
|
||||
上海市松江 松江
|
||||
上海市徐汇 徐汇
|
||||
上海市杨浦 杨浦
|
||||
浦东南汇 浦东
|
||||
浦东新区 浦东
|
||||
宝山区 宝山
|
||||
长宁区 长宁
|
||||
崇明区 崇明
|
||||
奉贤区 奉贤
|
||||
虹口区 虹口
|
||||
黄浦区 黄浦
|
||||
嘉定区 嘉定
|
||||
金山区 金山
|
||||
静安区 静安
|
||||
闵行区 闵行
|
||||
普陀区 普陀
|
||||
青浦区 青浦
|
||||
松江区 松江
|
||||
徐汇区 徐汇
|
||||
杨浦区 杨浦
|
||||
宝山 宝山
|
||||
长宁 长宁
|
||||
崇明 崇明
|
||||
奉贤 奉贤
|
||||
虹口 虹口
|
||||
黄浦 黄浦
|
||||
嘉定 嘉定
|
||||
金山 金山
|
||||
静安 静安
|
||||
卢湾 卢湾
|
||||
闵行 闵行
|
||||
普陀 普陀
|
||||
浦东 浦东
|
||||
青浦 青浦
|
||||
松江 松江
|
||||
徐汇 徐汇
|
||||
杨浦 杨浦
|
||||
闸北 闸北
|
56
ruoyi/src/test/java/com/ruoyi/CleanUtilTests.java
Normal file
56
ruoyi/src/test/java/com/ruoyi/CleanUtilTests.java
Normal file
@ -0,0 +1,56 @@
|
||||
package com.ruoyi;
|
||||
|
||||
import com.ruoyi.common.utils.LoadUtil;
|
||||
import com.ruoyi.project.tool.address.CleanUtil;
|
||||
import com.ruoyi.project.tool.address.model.CleanAddress;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.Base64;
|
||||
import java.util.List;
|
||||
|
||||
public class CleanUtilTests {
|
||||
|
||||
@Test
|
||||
public void testSortDistrict() {
|
||||
List<String> textList = LoadUtil.loadList("temp.dict");
|
||||
textList.sort((x, y) -> y.length() - x.length());
|
||||
textList.forEach(item -> {
|
||||
System.out.println(item);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testClear() {
|
||||
List<String> textList = LoadUtil.loadList("icbc.dict");
|
||||
|
||||
textList.forEach(item -> {
|
||||
CleanAddress cleanAddress = CleanUtil.clear(item);
|
||||
System.out.println(cleanAddress);
|
||||
});
|
||||
|
||||
|
||||
// Assert.assertEquals(cleanAddress.getDistrict(), "");
|
||||
// Assert.assertEquals(cleanAddress.getDistrict(), "");
|
||||
// Assert.assertEquals(cleanAddress.getDistrict(), "");
|
||||
// Assert.assertEquals(cleanAddress.getDistrict(), "");
|
||||
// Assert.assertEquals(cleanAddress.getDistrict(), "");
|
||||
// Assert.assertEquals(cleanAddress.getDistrict(), "");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBase64() throws IOException {
|
||||
Base64.Decoder decoder = Base64.getDecoder();
|
||||
byte[] buffer = decoder.decode(
|
||||
"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");
|
||||
FileOutputStream out = new FileOutputStream("C:\\Work\\uv\\fonts2.woff");
|
||||
out.write(buffer);
|
||||
out.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
82659
ruoyi/src/test/resources/icbc.dict
Normal file
82659
ruoyi/src/test/resources/icbc.dict
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,204 +1,70 @@
|
||||
世博大道1859号
|
||||
世博大道2095号
|
||||
世界大道1710号
|
||||
世纪大道100号
|
||||
世纪大道1065号,世纪大道1701号
|
||||
世纪大道1118号
|
||||
世纪大道1128号
|
||||
世纪大道1168号
|
||||
世纪大道1192号
|
||||
世纪大道1200号
|
||||
世纪大道1217号
|
||||
世纪大道1500号
|
||||
世纪大道1501号
|
||||
世纪大道1568号
|
||||
世纪大道1589号
|
||||
世纪大道1600号
|
||||
世纪大道1700号
|
||||
世纪大道1777号
|
||||
世纪大道199号
|
||||
世纪大道2000号
|
||||
世纪大道201号
|
||||
世纪大道210号
|
||||
世纪大道211号
|
||||
世纪大道800号
|
||||
世纪大道88号
|
||||
世纪大道88号
|
||||
世纪大道8号
|
||||
东方路69号,浦东大道555号
|
||||
东方路与张扬路交叉口,福山路268号,世纪大道1217号,张杨路980号
|
||||
五莲路201弄,莱阳路451弄,利津路158弄,浦东大道2970弄
|
||||
五莲路201弄,莱阳路451弄,利津路158弄,浦东大道2970弄
|
||||
商城路800号,世纪大道1090号
|
||||
大道站路94弄,迎博路94弄(旧)
|
||||
奉浦大道95弄
|
||||
奉浦大道95弄
|
||||
奉浦大道95弄
|
||||
奉浦大道95弄
|
||||
奉浦大道95弄
|
||||
奉浦大道97号,奉浦大道99号,环城东路455弄,环城东路465弄
|
||||
山兰路446-462号,申港大道87号,水芸路445-473号
|
||||
崂山路80弄,浦东大道290弄,浦东大道310号,浦东大道312号
|
||||
崧泽大道6066号
|
||||
崧泽大道9188弄
|
||||
崧泽大道9288弄
|
||||
崧泽大道崧盈路
|
||||
巨野路22号,浦东大道1638号(旧)
|
||||
德平路12弄10号,浦东大道2346号
|
||||
德平路25弄,浦东大道2388弄,龙居路30弄
|
||||
新园路508弄,新园路509弄,崧泽大道9190弄
|
||||
昌邑路588弄,浦东大道580号
|
||||
昌邑路600号,浦东大道599号
|
||||
朱家角镇绿舟路228弄,朱家角镇绿舟路188弄,淀山湖大道3699弄
|
||||
杭州湾大道118弄
|
||||
杭州湾大道1858号
|
||||
杭州湾大道88号
|
||||
林荫大道1888弄,林荫新路255弄
|
||||
梅川路1518号,浦东大道2238号
|
||||
沪太路1717号,浦东大道1476号,浦东大道1482号
|
||||
浦东大道1000弄
|
||||
浦东大道1081-1089号,浦东大道1081号,浦东大道1083号,浦东大道1085号,浦东大道1087号,浦东大道1089号
|
||||
浦东大道1081-1089号,浦东大道1081号,浦东大道1083号,浦东大道1085号,浦东大道1087号,浦东大道1089号
|
||||
浦东大道1081号,浦东大道1085号,浦东大道1089号A座,浦东大道1089号B座
|
||||
浦东大道1093弄
|
||||
浦东大道1093弄
|
||||
浦东大道1093弄5号,浦东大道1093弄6号,浦东大道1093弄11号,浦东大道1093弄12号,浦东大道1093弄15号,浦东大道1093弄16号
|
||||
浦东大道1097弄
|
||||
浦东大道1097弄
|
||||
浦东大道1097弄12-16号
|
||||
浦东大道1139号,浦东大道1139弄
|
||||
浦东大道1139弄
|
||||
浦东大道1200号
|
||||
浦东大道1235号
|
||||
浦东大道136弄
|
||||
浦东大道138号
|
||||
浦东大道140弄
|
||||
浦东大道1460弄
|
||||
浦东大道1464-1470号
|
||||
浦东大道1525号,浦东大道1535号,浦东大道1539号
|
||||
浦东大道1585弄,浦东大道1615弄,浦东大道1591-1617号(单)
|
||||
浦东大道1608号
|
||||
浦东大道1608号
|
||||
浦东大道1623弄
|
||||
浦东大道1695弄16-51号
|
||||
浦东大道1695弄1号
|
||||
浦东大道1700弄
|
||||
浦东大道1700弄,浦东大道1666号
|
||||
浦东大道1819弄
|
||||
浦东大道1851弄
|
||||
浦东大道1868号
|
||||
浦东大道1号
|
||||
浦东大道2000号
|
||||
浦东大道2123号
|
||||
浦东大道2139弄
|
||||
浦东大道2160号,浦东大道2220号
|
||||
浦东大道2164、2188、2212号,浦东大道2160号,浦东大道2164号,浦东大道2188号,浦东大道2212号,浦东大道2220号
|
||||
浦东大道2330号
|
||||
浦东大道2406弄
|
||||
浦东大道2406弄
|
||||
浦东大道2440号
|
||||
浦东大道2511弄
|
||||
浦东大道2511弄
|
||||
浦东大道2515号
|
||||
浦东大道2515号,浦东大道2521号
|
||||
浦东大道2536号
|
||||
浦东大道2554号
|
||||
浦东大道2554弄
|
||||
浦东大道2556号
|
||||
浦东大道2567弄
|
||||
浦东大道2567弄
|
||||
浦东大道2568弄
|
||||
浦东大道2641弄,浦东大道2639弄
|
||||
浦东大道2738号
|
||||
浦东大道2742弄
|
||||
浦东大道2742弄2号,浦东大道2742弄3号
|
||||
浦东大道2762、2776号,浦东大道2762号,浦东大道2776号
|
||||
浦东大道2762、2776号,浦东大道2762号,浦东大道2776号
|
||||
浦东大道2769号,浦东大道2771号,浦东大道2773号
|
||||
浦东大道2778弄
|
||||
浦东大道2789号
|
||||
浦东大道288号
|
||||
浦东大道2926号,浦东大道2930号,五莲路2、4、6、18、20、28号,五莲路22号
|
||||
浦东大道2970弄
|
||||
浦东大道2970弄3号,浦东大道2970弄4号,浦东大道2970弄5号
|
||||
浦东大道3000号
|
||||
浦东大道3036弄
|
||||
浦东大道3040弄
|
||||
浦东大道3076弄,浦东大道3080弄
|
||||
浦东大道3号
|
||||
浦东大道3号,东城路180号
|
||||
浦东大道435号,浦东大道437号,浦东大道437号甲
|
||||
浦东大道501弄
|
||||
浦东大道592号
|
||||
浦东大道599号,昌邑路600号
|
||||
浦东大道604弄
|
||||
浦东大道637号
|
||||
浦东大道637号
|
||||
浦东大道651弄,浦东大道691弄
|
||||
浦东大道666号
|
||||
浦东大道720号
|
||||
浦东大道727弄
|
||||
浦东大道814号
|
||||
浦东大道834弄
|
||||
浦东大道900-988号,浦东大道900号,浦东大道988号
|
||||
浦东大道981号
|
||||
浦东大道988弄
|
||||
海港大道和沪城环路转角内侧
|
||||
海秀路83-139号,金山大道3898弄,卫宏路530号
|
||||
淀山湖大道218号
|
||||
淀山湖大道3600弄,淀山湖大道3800弄
|
||||
淀山湖大道399号
|
||||
淀山湖大道851号
|
||||
滨江大道1380弄,滨江大道1399弄
|
||||
滨江大道1773弄
|
||||
滨江大道1777号
|
||||
滨江大道399弄
|
||||
滨江大道999号、滨江大道993弄
|
||||
物流大道600弄
|
||||
环湖西二路568-624号,龙竹路102-120号,申港大道153-177号,云鹃路473-527号,申港大道588号
|
||||
瑞木路130号,申港大道158号,云娟路628号,云鹃路628_4号
|
||||
申港大道133号
|
||||
申港大道1号,申港大道33号,水芸路418号
|
||||
申港大道200号
|
||||
申港大道88号,水芸路501号,水芸路505号,水芸路523号,水芸路525号,水芸路527号
|
||||
福山路,浦东大道729号
|
||||
福山路268号,世纪大道1217号,张杨路980号
|
||||
莱阳路201弄,莱阳路301弄,浦东大道2920弄,五莲路100弄
|
||||
诸陆西路1088弄,崧泽大道2333弄
|
||||
金山大道2335号
|
||||
金山大道2335弄,卫零路886弄
|
||||
金山大道2335弄,卫零路886弄
|
||||
金山大道2335弄,卫零路886弄
|
||||
金桥路301弄,金桥路351弄,浦东大道2746弄
|
||||
青浦镇淀山湖大道199弄
|
||||
龙东大道1288号
|
||||
龙东大道1号
|
||||
龙东大道1号,龙东大道415弄
|
||||
龙东大道1号,龙东大道415弄
|
||||
龙东大道1号,龙东大道415弄
|
||||
龙东大道1号,龙东大道415弄
|
||||
龙东大道1号,龙东大道415弄
|
||||
龙东大道2001弄
|
||||
龙东大道2001弄
|
||||
龙东大道2001弄
|
||||
龙东大道2211弄
|
||||
龙东大道2211弄
|
||||
龙东大道2211弄
|
||||
龙东大道2255弄
|
||||
龙东大道2255弄
|
||||
龙东大道2255弄
|
||||
龙东大道2255弄
|
||||
龙东大道3000号
|
||||
龙东大道3158弄
|
||||
龙东大道3800弄
|
||||
龙东大道4028弄
|
||||
龙东大道4288弄
|
||||
龙东大道4288弄
|
||||
龙东大道4288弄
|
||||
龙东大道5385号
|
||||
龙东大道5401弄
|
||||
龙东大道5401弄
|
||||
龙东大道666弄,松涛路200弄
|
||||
龙东大道华东路
|
||||
龙腾大道2555-9
|
||||
龙腾大道2815号,龙腾大道2835号,龙腾大道2865号
|
||||
宝山
|
||||
宝山区
|
||||
长宁
|
||||
长宁区
|
||||
崇明
|
||||
崇明区
|
||||
奉贤
|
||||
奉贤区
|
||||
虹口
|
||||
虹口区
|
||||
黄浦
|
||||
黄浦区
|
||||
嘉定
|
||||
嘉定区
|
||||
金山
|
||||
金山区
|
||||
静安
|
||||
静安区
|
||||
卢湾
|
||||
闵行
|
||||
闵行区
|
||||
普陀
|
||||
普陀区
|
||||
浦东
|
||||
浦东南汇
|
||||
浦东新区
|
||||
青浦
|
||||
青浦区
|
||||
上海市宝山
|
||||
上海市宝山区
|
||||
上海市长宁
|
||||
上海市长宁区
|
||||
上海市崇明
|
||||
上海市崇明区
|
||||
上海市奉贤
|
||||
上海市奉贤区
|
||||
上海市虹口
|
||||
上海市虹口区
|
||||
上海市黄浦
|
||||
上海市黄浦区
|
||||
上海市嘉定
|
||||
上海市嘉定区
|
||||
上海市金山
|
||||
上海市金山区
|
||||
上海市静安
|
||||
上海市静安区
|
||||
上海市卢湾区
|
||||
上海市闵行
|
||||
上海市闵行区
|
||||
上海市南汇区
|
||||
上海市普陀
|
||||
上海市普陀区
|
||||
上海市浦东
|
||||
上海市浦东新区
|
||||
上海市青浦
|
||||
上海市青浦区
|
||||
上海市松江
|
||||
上海市松江区
|
||||
上海市徐汇
|
||||
上海市徐汇区
|
||||
上海市杨浦
|
||||
上海市杨浦区
|
||||
上海市闸北区
|
||||
松江
|
||||
松江区
|
||||
徐汇
|
||||
徐汇区
|
||||
杨浦
|
||||
杨浦区
|
||||
闸北
|
Loading…
x
Reference in New Issue
Block a user