@Test
public void searchByPolygon() throws InterruptedException {
String polygon = "112.859225,28.20061;112.859172,28.20059;112.859117,28.200556;112.859058,28.200503;112.859003,28.200391;112.858739,28.199761;112.858627,28.199041;112.858673,28.198558;112.859401,28.196282;112.859435,28.196228;112.859515,28.196194;112.859594,28.196185;112.859938,28.196191;112.860163,28.196155;112.860421,28.196063;112.860709,28.195926;112.860964,28.195702;112.861103,28.195304;112.861116,28.195285;112.86115,28.195274;112.863672,28.195709;112.863705,28.195727;112.863726,28.195767;112.863732,28.195806;112.863328,28.197513;112.863249,28.19793;112.863134,28.198666;112.863084,28.198923;112.862918,28.19949;112.862647,28.200901;112.862622,28.200931;112.862583,28.200958;112.862531,28.200989;112.862463,28.201008;112.859225,28.20061";
polygon = polygon.replaceAll(";", "|");
String types = "080000|060000";
String page_size = "25";
String show_fields = "children,business,indoor,navi,photos";
HttpResponse<String> result = null;
for(int i = 1; i <= 1; i++) {
result = amapSearchService.searchByPolygon(polygon, keywords, types, page_size, String.valueOf(i), show_fields, AMAP_CLIENT_AK);
System.out.println(result.getBodyResult());
Thread.sleep(3000L);
}
}
private String gcj2wgs84(String source) {
StringBuffer wgs84 = new StringBuffer(source.length());
String[] AOI_Str_Array = source.split(";");
for (int i = 0; i < AOI_Str_Array.length; i++) {
String loc = AOI_Str_Array[i];
String[] latlon = loc.split(",");
double lng = Double.parseDouble(latlon[0]);
double lat = Double.parseDouble(latlon[1]);
double[] gcj284 = CoordinateTransformUtil.gcj02towgs84(lng, lat);
wgs84.append(gcj284[0]).append(",").append(gcj284[1]).append("|");
}
return wgs84.substring(0, wgs84.length()-1);
}
public static double[] gcj02towgs84(double lng, double lat) {
if (out_of_china(lng, lat)) {
return new double[] { lng, lat };
}
double dlat = transformlat(lng - 105.0, lat - 35.0);
double dlng = transformlng(lng - 105.0, lat - 35.0);
double radlat = lat / 180.0 * Math.PI;
double magic = Math.sin(radlat);
magic = 1 - ee * magic * magic;
double sqrtmagic = Math.sqrt(magic);
dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * Math.PI);
dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * Math.PI);
double mglat = lat + dlat;
double mglng = lng + dlng;
return new double[] { lng * 2 - mglng, lat * 2 - mglat };
}
HttpResponse<String> result = null;
int scrapingIndex = 1;
int dataCount = 0;
do {
result = amapSearchService.searchByPolygon(gcjPolygon, keywords, types, page_size, String.valueOf(scrapingIndex), show_fields, AMAP_CLIENT_AK);
System.out.println("使用高德面搜索结果");
System.out.println(result.getBodyResult());
if(StringUtils.isNotEmpty(result.getBodyResult())) {
AmapSearchVO searchVO = gson.fromJson(result.getBodyResult(), AmapSearchVO.class);
System.out.println(searchVO.getCount());
dataCount = searchVO.getCount();
scrapingIndex ++;
}
Thread.sleep(3000L);
} while (dataCount > 0);
System.out.println("一共抓取数据页数:" + scrapingIndex);