|
|
|
@ -9,6 +9,7 @@ import java.io.InputStreamReader;
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.concurrent.Callable; |
|
|
|
|
import java.util.concurrent.ExecutionException; |
|
|
|
|
import java.util.concurrent.ExecutorService; |
|
|
|
|
import java.util.concurrent.Executors; |
|
|
|
|
import java.util.concurrent.Future; |
|
|
|
@ -62,7 +63,7 @@ public class CoordUtils {
|
|
|
|
|
|
|
|
|
|
List<Callable<JSONObject>> callables = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
for (int i = 0; i < coords.length-1; i++) { |
|
|
|
|
for (int i = 0; i < coords.length; i++) { |
|
|
|
|
|
|
|
|
|
int path = i; |
|
|
|
|
callables.add(() -> initCoordinates(coords[path])); |
|
|
|
@ -120,6 +121,8 @@ public class CoordUtils {
|
|
|
|
|
|
|
|
|
|
String depth = ""; |
|
|
|
|
|
|
|
|
|
Double distance = 1000000.0; |
|
|
|
|
|
|
|
|
|
List<Callable<JSONObject>> callables = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
for (int i = 0; i < allLocation.size(); i++) { |
|
|
|
@ -141,21 +144,42 @@ public class CoordUtils {
|
|
|
|
|
|
|
|
|
|
for (Future<JSONObject> rslt : results) { |
|
|
|
|
|
|
|
|
|
JSONObject jsonObject = rslt.get(); |
|
|
|
|
JSONObject jsonObject = new JSONObject(); |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
|
|
jsonObject = rslt.get(); |
|
|
|
|
|
|
|
|
|
} catch (InterruptedException | ExecutionException e) { |
|
|
|
|
|
|
|
|
|
jsonObject = null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(jsonObject != null) { |
|
|
|
|
if(jsonObject != null && jsonObject.get("distance") == null) { |
|
|
|
|
|
|
|
|
|
depth = (String) jsonObject.get("CD"); |
|
|
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
} else if(jsonObject != null && jsonObject.get("distance") != null) { |
|
|
|
|
|
|
|
|
|
Double distances = (Double) jsonObject.get("distance"); |
|
|
|
|
|
|
|
|
|
if(distance > distances) { |
|
|
|
|
|
|
|
|
|
distance = distances; |
|
|
|
|
|
|
|
|
|
depth = (String) jsonObject.get("CD"); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
JSONObject result = this.getCoordinateGis(coord, depth); |
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
|
|
|
|
|
|
JSONObject result = this.getCoordinateGis(coord, depth); |
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
} |
|
|
|
@ -168,7 +192,7 @@ public class CoordUtils {
|
|
|
|
|
public JSONObject getCoordinateGis(Coordinate coordinate, JSONObject polygon) throws IOException, ParseException { |
|
|
|
|
|
|
|
|
|
JSONObject obj = new JSONObject(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
obj = parseGeoJson(polygon, coordinate); |
|
|
|
|
|
|
|
|
|
if(obj == null) return null; |
|
|
|
@ -240,6 +264,10 @@ public class CoordUtils {
|
|
|
|
|
|
|
|
|
|
public JSONObject contains(List<JSONObject> features, Point point) { |
|
|
|
|
|
|
|
|
|
JSONObject result = null; |
|
|
|
|
|
|
|
|
|
Double standard = 10000000.0; |
|
|
|
|
|
|
|
|
|
for(int i=0; i<features.size(); i++) { |
|
|
|
|
|
|
|
|
|
JSONObject geometry = (JSONObject) features.get(i).get("geometry"); |
|
|
|
@ -268,20 +296,35 @@ public class CoordUtils {
|
|
|
|
|
|
|
|
|
|
polygonPaths.add(areaCoord); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
polygonPaths.add(polygonPaths.get(0)); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Polygon polygon = geometryFactory.createPolygon(polygonPaths.toArray(new Coordinate[] {})); |
|
|
|
|
|
|
|
|
|
if(polygon.contains(point)) return properties; |
|
|
|
|
|
|
|
|
|
if(polygon.contains(point)) { |
|
|
|
|
|
|
|
|
|
return properties; |
|
|
|
|
|
|
|
|
|
}else { |
|
|
|
|
|
|
|
|
|
Double distance = polygon.distance(point); |
|
|
|
|
|
|
|
|
|
if(standard > distance) { |
|
|
|
|
|
|
|
|
|
standard = distance; |
|
|
|
|
|
|
|
|
|
result = properties; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return null; |
|
|
|
|
result.put("distance", standard); |
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|