GeoTools 是一个基于开放地理空间联盟(OGC)数据结构规范的 Java 开源地理空间数据操作库。
参考资料:官方教程 | 官方文档 | EPSP
arcgrid
、geotiff
、grassraster
、JPEG
、TIFF
、GIF
、PNG
、imageio-ext-gdal
、imagemosaic
、imagepyramid
、JP2K
、matlab
db2
、geopackage
、hana
、h2
、mysql
、oracle
、postgis
、sqlserver
、teradata
app-schema
、csv
、geojson
、property
、shapefile
、wfs
xsd-core
、fes
、filter
、gml2
、gml3
、kml
、ows
、sld
、wcs
、wfs
、wms
、wmts
、wps
支持众多OGC (开放地理空间联盟) 标准
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>E:/MavenRepositorylocalRepository>
<pluginGroups>
<pluginGroup>org.codehaus.cargopluginGroup>
pluginGroups>
<servers>
<server>
<id>releasesid>
<username>adminusername>
<password>admin123password>
server>
<server>
<id>snapshotsid>
<username>adminusername>
<password>admin123password>
server>
servers>
<mirrors>
<mirror>
<id>osgeoid>
<name>OSGeo Release Repositoryname>
<url>https://repo.osgeo.org/repository/release/url>
mirror>
<mirror>
<id>osgeo-snapshotid>
<name>OSGeo Snapshot Repositoryname>
<url>https://repo.osgeo.org/repository/snapshot/url>
mirror>
mirrors>
settings>
<properties>
<java.version>1.8java.version>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
<maven.build.timestamp.format>yyyyMMddHHmmssmaven.build.timestamp.format>
<geotools.version>24.2geotools.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
dependency>
<dependency>
<groupId>org.geotoolsgroupId>
<artifactId>gt-renderartifactId>
<version>${geotools.version}version>
dependency>
<dependency>
<groupId>org.geotoolsgroupId>
<artifactId>gt-jdbcartifactId>
<version>${geotools.version}version>
dependency>
<dependency>
<groupId>org.geotoolsgroupId>
<artifactId>gt-xmlartifactId>
<version>${geotools.version}version>
dependency>
<dependency>
<groupId>org.geotoolsgroupId>
<artifactId>gt-cqlartifactId>
<version>${geotools.version}version>
dependency>
<dependency>
<groupId>org.geotoolsgroupId>
<artifactId>gt-mainartifactId>
<version>${geotools.version}version>
dependency>
<dependency>
<groupId>org.geotoolsgroupId>
<artifactId>gt-coverageartifactId>
<version>${geotools.version}version>
dependency>
<dependency>
<groupId>org.geotoolsgroupId>
<artifactId>gt-referencingartifactId>
<version>${geotools.version}version>
dependency>
<dependency>
<groupId>org.geotoolsgroupId>
<artifactId>gt-metadataartifactId>
<version>${geotools.version}version>
dependency>
<dependency>
<groupId>org.geotoolsgroupId>
<artifactId>gt-opengisartifactId>
<version>${geotools.version}version>
dependency>
<dependency>
<groupId>org.geotoolsgroupId>
<artifactId>gt-geojsonartifactId>
<version>${geotools.version}version>
dependency>
<dependency>
<groupId>org.geotoolsgroupId>
<artifactId>gt-geojsondatastoreartifactId>
<version>${geotools.version}version>
dependency>
<dependency>
<groupId>org.geotoolsgroupId>
<artifactId>gt-epsg-hsqlartifactId>
<version>${geotools.version}version>
dependency>
<dependency>
<groupId>org.geotoolsgroupId>
<artifactId>gt-shapefileartifactId>
<version>${geotools.version}version>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
dependency>
<dependency>
<groupId>org.apache.commonsgroupId>
<artifactId>commons-lang3artifactId>
<version>3.9version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.2.76version>
dependency>
<dependency>
<groupId>org.testnggroupId>
<artifactId>testngartifactId>
<version>RELEASEversion>
<scope>compilescope>
dependency>
dependencies>
<repositories>
<repository>
<id>osgeoid>
<name>OSGeo Release Repositoryname>
<url>https://repo.osgeo.org/repository/release/url>
<snapshots>
<enabled>falseenabled>
snapshots>
<releases>
<enabled>trueenabled>
releases>
repository>
<repository>
<id>osgeo-snapshotid>
<name>OSGeo Snapshot Repositoryname>
<url>https://repo.osgeo.org/repository/snapshot/url>
<snapshots>
<enabled>trueenabled>
snapshots>
<releases>
<enabled>falseenabled>
releases>
repository>
repositories>
import com.example.geotool.demo.utils.GeoToolsUtil;
import lombok.extern.slf4j.Slf4j;
import org.geotools.geojson.geom.GeometryJSON;
import org.geotools.geometry.jts.JTSFactoryFinder;
import org.junit.Test;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.Point;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKTReader;
import java.io.IOException;
import java.io.StringReader;
@Slf4j
public class PointDemo {
@Test
public void createPoint() throws IOException {
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
Point point = geometryFactory.createPoint(new Coordinate(-106.4453583, 39.11775));
GeoToolsUtil instance = GeoToolsUtil.getInstance().fromGeometry(point);
log.info("{}", instance.toGeoJSON());
log.info("{}", instance.toFeatureGeoJSON());
}
@Test
public void createPointFromGeoJson() throws IOException {
GeometryJSON geometryJson = new GeometryJSON(15);
Point point = (Point) geometryJson.read(new StringReader("{\"type\":\"Point\",\"coordinates\":[-106.445358,39.11775]}"));
log.info("{}", point.toText());
}
@Test
public void createPointFromWKT() throws ParseException {
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
WKTReader reader = new WKTReader(geometryFactory);
Point point = (Point) reader.read("POINT (-106.4453583 39.11775)");
log.info("{}", point.toText());
}
}
import com.example.geotool.demo.utils.GeoToolsUtil;
import lombok.extern.slf4j.Slf4j;
import org.geotools.geojson.geom.GeometryJSON;
import org.geotools.geometry.jts.JTSFactoryFinder;
import org.junit.Test;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.MultiPoint;
import org.locationtech.jts.geom.Point;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKTReader;
import java.io.IOException;
import java.io.StringReader;
@Slf4j
public class MultiPointDemo {
@Test
public void createMultiPoint() throws IOException {
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
MultiPoint multiPoint = geometryFactory.createMultiPoint(new Point[]{
geometryFactory.createPoint(new Coordinate(1, 1)),
geometryFactory.createPoint(new Coordinate(2, 2)),
geometryFactory.createPoint(new Coordinate(3, 3)),
geometryFactory.createPoint(new Coordinate(4, 4))
});
GeoToolsUtil instance = GeoToolsUtil.getInstance().fromGeometry(multiPoint);
log.info("{}", instance.toGeoJSON());
log.info("{}", instance.toFeatureGeoJSON());
}
@Test
public void createMultiPointFromGeoJson() throws IOException {
GeometryJSON geometryJson = new GeometryJSON(6);
MultiPoint multiPoint = (MultiPoint) geometryJson.read(new StringReader("{\"type\":\"MultiPoint\",\"coordinates\":[[1,1],[2,2],[3,3],[4,4]]}"));
log.info("{}", multiPoint.toText());
}
@Test
public void createMultiPointFromWKT() throws ParseException {
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
WKTReader reader = new WKTReader(geometryFactory);
MultiPoint multiPoint = (MultiPoint) reader.read("MULTIPOINT ((1 1), (2 2), (3 3), (4 4))");
log.info("{}", multiPoint.toText());
}
}
import com.example.geotool.demo.utils.GeoToolsUtil;
import lombok.extern.slf4j.Slf4j;
import org.geotools.geojson.geom.GeometryJSON;
import org.geotools.geometry.jts.JTSFactoryFinder;
import org.junit.Test;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.LineString;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKTReader;
import java.io.IOException;
import java.io.StringReader;
@Slf4j
public class LineDemo {
@Test
public void createLine() throws IOException {
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
LineString line = geometryFactory.createLineString(new Coordinate[]{new Coordinate(0, 2), new Coordinate(2, 0), new Coordinate(8, 6)});
GeoToolsUtil instance = GeoToolsUtil.getInstance().fromGeometry(line);
log.info("{}", instance.toGeoJSON());
log.info("{}", instance.toFeatureGeoJSON());
}
@Test
public void createLineFromGeoJson() throws IOException {
GeometryJSON geometryJson = new GeometryJSON(6);
LineString line = (LineString) geometryJson.read(new StringReader("{\"type\":\"LineString\",\"coordinates\":[[0.0,2],[2,0.0],[8,6]]}"));
log.info("{}", line.toText());
}
@Test
public void createLineFromWKT() throws ParseException {
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
WKTReader reader = new WKTReader(geometryFactory);
LineString line = (LineString) reader.read("LINESTRING(0 2, 2 0, 8 6)");
log.info("{}", line.toText());
}
}
import com.example.geotool.demo.utils.GeoToolsUtil;
import lombok.extern.slf4j.Slf4j;
import org.geotools.geojson.geom.GeometryJSON;
import org.geotools.geometry.jts.JTSFactoryFinder;
import org.junit.Test;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.LineString;
import org.locationtech.jts.geom.MultiLineString;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKTReader;
import java.io.IOException;
import java.io.StringReader;
@Slf4j
public class MultiLineDemo {
@Test
public void createLine() throws IOException {
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
MultiLineString multiLine = geometryFactory.createMultiLineString(new LineString[]{
geometryFactory.createLineString(new Coordinate[]{new Coordinate(0, 2), new Coordinate(2, 0), new Coordinate(8, 6)}),
geometryFactory.createLineString(new Coordinate[]{new Coordinate(1, 2), new Coordinate(3, 0), new Coordinate(9, 6)}),
geometryFactory.createLineString(new Coordinate[]{new Coordinate(2, 2), new Coordinate(4, 0), new Coordinate(10, 6)}),
geometryFactory.createLineString(new Coordinate[]{new Coordinate(3, 2), new Coordinate(5, 0), new Coordinate(11, 6)})
});
GeoToolsUtil instance = GeoToolsUtil.getInstance().fromGeometry(multiLine);
log.info("{}", instance.toGeoJSON());
log.info("{}", instance.toFeatureGeoJSON());
}
@Test
public void createMultiPointFromGeoJson() throws IOException {
GeometryJSON geometryJson = new GeometryJSON(6);
MultiLineString multiLine = (MultiLineString) geometryJson.read(new StringReader("{\"type\":\"MultiLineString\",\"coordinates\":[[[0.0,2],[2,0.0],[8,6]],[[1,2],[3,0.0],[9,6]],[[2,2],[4,0.0],[10,6]],[[3,2],[5,0.0],[11,6]]]}"));
log.info("{}", multiLine.toText());
}
@Test
public void createMultiPointFromWKT() throws ParseException {
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
WKTReader reader = new WKTReader(geometryFactory);
MultiLineString multiLine = (MultiLineString) reader.read("MULTILINESTRING ((0 2, 2 0, 8 6), (1 2, 3 0, 9 6), (2 2, 4 0, 10 6), (3 2, 5 0, 11 6))");
log.info("{}", multiLine.toText());
}
}
import com.example.geotool.demo.utils.GeoToolsUtil;
import lombok.extern.slf4j.Slf4j;
import org.geotools.geojson.geom.GeometryJSON;
import org.geotools.geometry.jts.JTSFactoryFinder;
import org.junit.Test;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.LinearRing;
import org.locationtech.jts.geom.Polygon;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKTReader;
import java.io.IOException;
import java.io.StringReader;
@Slf4j
public class PolygonDemo {
@Test
public void createPolygon() throws IOException {
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
LinearRing ring = geometryFactory.createLinearRing(new Coordinate[]{new Coordinate(4, 0), new Coordinate(2, 2), new Coordinate(4, 4), new Coordinate(6, 2), new Coordinate(4, 0)});
// 挖空区域
LinearRing[] holes = null;
Polygon polygon = geometryFactory.createPolygon(ring, holes);
GeoToolsUtil instance = GeoToolsUtil.getInstance().fromGeometry(polygon);
log.info("{}", instance.toGeoJSON());
log.info("{}", instance.toFeatureGeoJSON());
}
@Test
public void createPolygonFromGeoJson() throws IOException {
GeometryJSON geometryJson = new GeometryJSON(6);
Polygon polygon = (Polygon) geometryJson.read(new StringReader("{\"type\":\"Polygon\",\"coordinates\":[[[4,0.0],[2,2],[4,4],[6,2],[4,0.0]]]}"));
log.info("{}", polygon.toText());
}
@Test
public void createPolygonFromWKT() throws ParseException {
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
WKTReader reader = new WKTReader(geometryFactory);
Polygon polygon = (Polygon) reader.read("POLYGON((20 10, 30 0, 40 10, 30 20, 20 10))");
log.info("{}", polygon);
}
}
import com.example.geotool.demo.utils.GeoToolsUtil;
import lombok.extern.slf4j.Slf4j;
import org.geotools.geojson.geom.GeometryJSON;
import org.geotools.geometry.jts.JTSFactoryFinder;
import org.junit.Test;
import org.locationtech.jts.geom.*;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKTReader;
import java.io.IOException;
import java.io.StringReader;
@Slf4j
public class MultiPolygonDemo {
@Test
public void createPolygon() throws IOException {
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
LinearRing ring = geometryFactory.createLinearRing(new Coordinate[]{new Coordinate(4, 0), new Coordinate(2, 2), new Coordinate(4, 4), new Coordinate(6, 2), new Coordinate(4, 0)});
Polygon polygon = geometryFactory.createPolygon(ring, null);
Polygon polygon1 = (Polygon) polygon.copy();
Polygon polygon2 = (Polygon) polygon.copy();
for (Coordinate coordinate : polygon2.getCoordinates()) {
coordinate.x += 5;
}
Polygon polygon3 = (Polygon) polygon.copy();
for (Coordinate coordinate : polygon3.getCoordinates()) {
coordinate.x += 10;
}
Polygon polygon4 = (Polygon) polygon.copy();
for (Coordinate coordinate : polygon4.getCoordinates()) {
coordinate.x += 20;
}
MultiPolygon multiPolygon = geometryFactory.createMultiPolygon(new Polygon[]{polygon1, polygon2, polygon3, polygon4});
GeoToolsUtil instance = GeoToolsUtil.getInstance().fromGeometry(multiPolygon);
log.info("{}", instance.toGeoJSON());
log.info("{}", instance.toFeatureGeoJSON());
}
@Test
public void createMultiPolygonFromGeoJson() throws IOException {
GeometryJSON geometryJson = new GeometryJSON(6);
MultiPolygon multiPolygon = (MultiPolygon) geometryJson.read(new StringReader("{\"type\":\"MultiPolygon\",\"coordinates\":[[[[4,0],[2,2],[4,4],[6,2],[4,0]]],[[[9,0],[7,2],[9,4],[11,2],[9,0]]],[[[14,0],[12,2],[14,4],[16,2],[14,0]]],[[[24,0],[22,2],[24,4],[26,2],[24,0]]]]}"));
log.info("{}", multiPolygon.toText());
}
@Test
public void createMultiPolygonFromWKT() throws ParseException {
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
WKTReader reader = new WKTReader(geometryFactory);
MultiPolygon multiPolygon = (MultiPolygon) reader.read("MULTIPOLYGON (((4 0, 2 2, 4 4, 6 2, 4 0)), ((9 0, 7 2, 9 4, 11 2, 9 0)), ((14 0, 12 2, 14 4, 16 2, 14 0)), ((24 0, 22 2, 24 4, 26 2, 24 0)))");
log.info("{}", multiPolygon);
}
}
import lombok.extern.slf4j.Slf4j;
import org.geotools.geometry.jts.JTSFactoryFinder;
import org.junit.Test;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.LinearRing;
import org.locationtech.jts.geom.Polygon;
@Slf4j
public class CircleDemo {
/**
* 绘制圆形
*/
@Test
public void circleTest() {
double x = 0;
double y = 0;
double radius = 5;
final int sides = 32;//圆上面的点个数
Coordinate coords[] = new Coordinate[sides+1];
for( int i = 0; i < sides; i++){
double angle = ((double) i / (double) sides) * Math.PI * 2.0;
double dx = Math.cos( angle ) * radius;
double dy = Math.sin( angle ) * radius;
coords[i] = new Coordinate( x + dx, y + dy );
}
coords[sides] = coords[0];
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
LinearRing ring = geometryFactory.createLinearRing( coords );
Polygon polygon = geometryFactory.createPolygon( ring, null );
log.info("{}", polygon);
}
}
import com.example.geotool.demo.utils.GeoToolsUtil;
import lombok.extern.slf4j.Slf4j;
import org.geotools.geojson.geom.GeometryJSON;
import org.geotools.geometry.jts.JTSFactoryFinder;
import org.junit.Before;
import org.junit.Test;
import org.locationtech.jts.geom.*;
import java.io.IOException;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@Slf4j
public class BaseInfoDemo {
private Geometry polygon = null;
private static final String GEO_JSON = "{\"type\": \"MultiPolygon\",\"coordinates\": [[[[100.12890095300009,25.56699001800007],[100.12866821100005,25.567212992000067],[100.12803975600008,25.56837758300003],[100.12795115400009,25.56845368300003],[100.12701789700009,25.569255256000078],[100.12684482400005,25.569739818000075],[100.12706364100007,25.570350233000057],[100.12731737600007,25.570895947000055],[100.12788926600007,25.571278138000026],[100.12814361000005,25.571888278000079],[100.12828899400006,25.572241530000047],[100.12832782500004,25.572595603000026],[100.12879196900008,25.57284975700003],[100.12936115800005,25.572942022000065],[100.12975607900006,25.573390000000076],[100.13011457600003,25.573741609000025],[100.13043876800004,25.574222345000068],[100.13026630500008,25.57477133600003],[100.13051734900006,25.575027127000057],[100.13066063100007,25.57515488400003],[100.13105375000004,25.575409578000064],[100.13131053500007,25.57627741500005],[100.13164977800006,25.576468091000036],[100.13199986200005,25.57700589600006],[100.13204623000006,25.577077127000054],[100.13219586400004,25.57788135900006],[100.13362904700007,25.579191123000045],[100.13498516000004,25.579857160000079],[100.13705472500004,25.580839810000044],[100.13748643500009,25.581416340000034],[100.13831130500006,25.582247540000027],[100.13902384700003,25.582467516000066],[100.13979829700009,25.581720546000044],[100.14093007500009,25.581196299000056],[100.14206062200008,25.58054319300004],[100.14326494500004,25.58017944200003],[100.14408190200004,25.580173072000038],[100.14421939800008,25.57968876900003],[100.14467626400006,25.579169757000046],[100.14532300600007,25.579050460000077],[100.14595282600004,25.578934281000046],[100.14708944900008,25.578925397000036],[100.14822361900008,25.57865879900004],[100.14844824200009,25.578722344000029],[100.14922092500007,25.578940927000077],[100.14932993700006,25.579197796000075],[100.14936791200006,25.579455222000037],[100.14912449100007,25.580004789000044],[100.14895394900008,25.58074707800006],[100.14923810800008,25.580744851000078],[100.14966373400006,25.580677086000038],[100.15023113300004,25.58057599100005],[100.15090170800005,25.58011971700006],[100.15139160700005,25.579342703000067],[100.15196755600005,25.579003920000049],[100.15216873000009,25.57888558600007],[100.15270121100008,25.57884918800005],[100.15277037100008,25.57886704500004],[100.15391195100006,25.57916182100007],[100.15423563300004,25.57957807200006],[100.15477459300007,25.580218135000054],[100.15492222500007,25.580796848000039],[100.15538706600006,25.581115340000055],[100.15581361700004,25.581144195000037],[100.15623213700008,25.580335513000024],[100.15643784500009,25.579560726000069],[100.15671613400008,25.57894644000004],[100.15724737900007,25.57878117300004],[100.15731506800006,25.578780640000049],[100.15792224400008,25.57877584700003],[100.15828504200005,25.57889446100006],[100.15888436000006,25.57909040100003],[100.15991318300006,25.578953408000076],[100.16078826900008,25.578710709000064],[100.16086972600005,25.57868811700007],[100.16092367900007,25.578696188000039],[100.16168790700005,25.578810502000068],[100.16307688500007,25.579186075000054],[100.16379131200006,25.579599207000056],[100.16425741600006,25.580046521000044],[100.16454654800003,25.580559668000036],[100.16462411700008,25.581235572000027],[100.16482341600005,25.58164204900004],[100.16553506400003,25.58176525400006],[100.16728738500007,25.581751318000046],[100.16848203400008,25.581873350000025],[100.16893491400004,25.58186974000006],[100.16984137900005,25.58193499600003],[100.17056230300006,25.582098373000066],[100.17091002900009,25.582240567000047],[100.17126057400009,25.58267267100007],[100.17139612000006,25.582913203000034],[100.17163846400007,25.583177041000057],[100.17235798700006,25.58319545200004],[100.17262603400008,25.58336243900004],[100.17297517700007,25.583649583000068],[100.17343088500008,25.583935873000028],[100.17369893600005,25.58410285800005],[100.17398704200008,25.583593164000037],[100.17419381600007,25.58293915100006],[100.17421340100003,25.58221415400004],[100.17431337600005,25.581536836000056],[100.17444093100005,25.580955941000075],[100.17462293900008,25.580495418000056],[100.17467410100005,25.580277557000046],[100.17515173200008,25.580080440000076],[100.17549804900006,25.580077664000045],[100.17629841400009,25.580192054000066],[100.17691654500006,25.58074280600005],[100.17766505100008,25.581002571000057],[100.17878722500007,25.581331815000057],[100.17980119300006,25.581492790000028],[100.18129633700005,25.58181901200004],[100.18180296900005,25.58186325300005],[100.18198944800008,25.581861750000035],[100.18249276500007,25.581567756000028],[100.18283789900005,25.58144416700003],[100.18315994500007,25.581683183000054],[100.18353551100006,25.58194592600006],[100.18426000700004,25.582471624000048],[100.18481897200008,25.58241878700005],[100.18561176300006,25.58176002600004],[100.18609056700007,25.581683671000066],[100.18641072000009,25.58172940300005],[100.18678605500009,25.58196798000006],[100.18702652600007,25.58203851600007],[100.18745205100004,25.581962588000068],[100.18814088100004,25.581570428000079],[100.18861968300007,25.581494065000073],[100.18944670500008,25.581608165000039],[100.18976542800005,25.581508935000046],[100.19023850700006,25.580852742000049],[100.19073822100006,25.58019633200007],[100.19115657900005,25.57939561300003],[100.19165628100007,25.57873920000003],[100.19192219400009,25.578688717000039],[100.19248256900005,25.578780806000056],[100.19304461800005,25.57904200900003],[100.19341813700004,25.57918893900006],[100.19352603400006,25.579231382000044],[100.19384498500004,25.57915630200006],[100.19413945100007,25.57929887100005],[100.19438134700005,25.579600241000038],[100.19440919000005,25.579634932000034],[100.19441206000005,25.57992484400006],[100.19454812800007,25.580213670000036],[100.19484451200003,25.58054951200006],[100.19487521900003,25.580960004000077],[100.19464096600007,25.581517621000044],[100.19463786100005,25.581578098000024],[100.19461863400005,25.58195270500005],[100.19464742500009,25.58216992100006],[100.19470333800007,25.582435237000028],[100.19481253000004,25.582700123000053],[100.19497787500007,25.583254483000077],[100.19511490500008,25.583639945000074],[100.19544105300008,25.584289643000035],[100.19547272300008,25.584796769000037],[100.19565915600004,25.585238206000044],[100.19590781000005,25.585422707000079],[100.19608860000005,25.585556855000048],[100.19560949600003,25.585892337000077],[100.19553002100008,25.585947988000045],[100.19492198700005,25.586726105000026],[100.19416479300009,25.58715722000005],[100.19424305700005,25.58756068300005],[100.19426368000006,25.58766699400007],[100.19426920600006,25.588224943000058],[100.19412068600008,25.588760897000044],[100.19398452300006,25.588862208000024],[100.19320445300008,25.589442601000035],[100.19277392400005,25.58998084900003],[100.19234615200009,25.59079807200004],[100.19234977800005,25.59080540700006],[100.19234892100008,25.59080704300004],[100.19253059000005,25.591174584000045],[100.19269046900007,25.591911259000029],[100.19269169200003,25.59191310800003],[100.19269323700006,25.591920233000054],[100.19295010800005,25.592308210000057],[100.19282969500006,25.59302611700008],[100.19283322500009,25.59303056600004],[100.19283246500004,25.593035089000069],[100.19313958500003,25.59342220700006],[100.19286476500008,25.59397907300007],[100.19258919400005,25.594632309000077],[100.19244019900003,25.595121765000046],[100.19206276100005,25.595845578000025],[100.19129500700007,25.595991319000065],[100.19047482600007,25.596021231000067],[100.18991469500009,25.596421026000028],[100.18986824000007,25.596909648000066],[100.18987155800005,25.596912850000025],[100.18987100800007,25.596918621000044],[100.19018164900007,25.597218345000046],[100.19059561500007,25.597793453000067],[100.19070611100006,25.598669827000039],[100.19012653200008,25.599697525000069],[100.18979552400003,25.59993270900003],[100.18864132400006,25.59989557600005],[100.18792825300005,25.600389602000065],[100.18767530000008,25.60074039900007],[100.18768062800007,25.600745821000034],[100.18767806900006,25.600749369000029],[100.18803885400007,25.601116569000057],[100.18809331600005,25.601527503000058],[100.18786989900008,25.602273307000077],[100.18728660900007,25.602929027000074],[100.18652338100009,25.603539702000036],[100.18573404500006,25.604104084000029],[100.18522010800007,25.60399199400007],[100.18421822900007,25.60367500500007],[100.18413824500004,25.603219239000056],[100.18413713600006,25.60321973200007],[100.18413547600005,25.603210267000067],[100.18354828000008,25.603470757000026],[100.18226926600005,25.603783328000078],[100.18126863800006,25.603721648000034],[100.18096438100008,25.604072848000045],[100.18096770300008,25.604081182000074],[100.18096715000006,25.604081820000034],[100.18130550600006,25.604930791000073],[100.18082239000006,25.605282981000074],[100.18082694100008,25.605290655000034],[100.18082516000006,25.60529195400005],[100.18108588900008,25.60573159800003],[100.18173669700008,25.606726093000078],[100.18248709500004,25.607578440000056],[100.18259511800005,25.608244660000027],[100.18167684600008,25.608740314000046],[100.18059879700009,25.60863275300005],[100.17961898900006,25.60808265000003],[100.17854140200007,25.60802157100005],[100.17834358800008,25.608347150000044],[100.17831427500005,25.608395393000025],[100.17831789600007,25.60840296200007],[100.17831704400004,25.60840436600006],[100.17860500500007,25.609006545000058],[100.17932428600006,25.609486680000033],[100.17927822700006,25.609945375000053],[100.17897394900007,25.61029657100005],[100.17843980700008,25.61074261300007],[100.17767943900008,25.611655469000028],[100.17711533100004,25.611660003000059],[100.17611055000003,25.611179824000034],[100.17565150400009,25.61143925500005],[100.17519563000008,25.612024157000066],[100.17535787300005,25.612883101000024],[100.17508262000007,25.613582802000054],[100.17508756000007,25.613586256000077],[100.17508538900006,25.613591774000044],[100.17544686900006,25.613844622000046],[100.17706957600007,25.614575590000073],[100.17864283600005,25.61549293300004],[100.17934027000007,25.616389173000074],[100.17925652500009,25.616729312000076],[100.17909464900004,25.617386785000066],[100.17872116100004,25.618529030000049],[100.17849370300006,25.61873893700005],[100.17755205200007,25.619607921000069],[100.17696907900006,25.62031009900005],[100.17710320400005,25.620913516000035],[100.17710431200003,25.62091501200007],[100.17710597300004,25.620922488000077],[100.17780766800007,25.621870089000028],[100.17843358000005,25.622934543000047],[100.17920585300004,25.623230576000024],[100.17936298100006,25.62345866800007],[100.17998445200004,25.624360799000045],[100.18006619300009,25.624935135000045],[100.17977327400007,25.626448725000047],[100.17921957400006,25.627522672000056],[100.17894499400006,25.62829212300005],[100.17851677300007,25.629086060000078],[100.17791130200004,25.630113918000064],[100.17673643900008,25.631053351000049],[100.17592184000006,25.63167988600003],[100.17459704200008,25.632589508000025],[100.17377697900008,25.632658084000075],[100.17326807600007,25.63266216200003],[100.17268275600009,25.632666850000076],[100.17224124700005,25.63298038100004],[100.17081653500009,25.63416976600007],[100.17003125600009,25.634300042000065],[100.16880143900005,25.634433862000038],[100.16829212500005,25.634809922000046],[100.16754765200006,25.635621852000044],[100.16684127300005,25.636836471000036],[100.16623596500004,25.637895283000036],[100.16606832300005,25.638327958000049],[100.16580222900007,25.639014726000029],[100.16499082100006,25.639982174000069],[100.16411010700004,25.64085717000006],[100.16274072900007,25.640713053000068],[100.16120156900007,25.64069426900005],[100.15991045300007,25.641572497000028],[100.15982375900006,25.64164519900004],[100.15879090300007,25.642511354000076],[100.15746853600007,25.64369980500004],[100.15614524900008,25.64479525200005],[100.15488587000005,25.645425188000048],[100.15369249400006,25.645806595000069],[100.15269378500006,25.645683575000076],[100.15134991400004,25.645032823000066],[100.14926859900004,25.643561187000047],[100.14707415200007,25.642972180000073],[100.14549345500007,25.642984558000025],[100.14543843100006,25.643591205000065],[100.14527021000004,25.64508051200005],[100.14460773400003,25.64574702300007],[100.14339387900009,25.645976954000049],[100.14150967600004,25.646046769000067],[100.14011132800005,25.646057667000038],[100.14011916400006,25.646884269000056],[100.14012187000009,25.646886679000035],[100.14012193100007,25.64689324000005],[100.14110306600009,25.647767370000055],[100.14129121400004,25.64837212200007],[100.14227498800006,25.64952177500004],[100.14410788500003,25.65044434300006],[100.14582340800007,25.651808691000047],[100.14686752800009,25.652902727000027],[100.14791185600007,25.65437756400007],[100.14762382900006,25.65597400100006],[100.14714845100008,25.657135053000049],[100.14599896900006,25.657750278000039],[100.14478919600004,25.658421075000036],[100.14481018800007,25.660625339000036],[100.14452085600004,25.662170702000024],[100.14427881000006,25.66249574400007],[100.14319990100006,25.66394457100006],[100.14251613700009,25.664198655000065],[100.14168496900004,25.664507508000044],[100.14028222100007,25.664077562000047],[100.13930147600007,25.66325854200005],[100.13898185400007,25.66301943800005],[100.13777035700008,25.66211313100007],[100.13594045000008,25.66152113100003],[100.13405495300003,25.66148064600003],[100.13371631600006,25.661585870000068],[100.13241787200008,25.661989323000058],[100.12956413300008,25.66245226800004],[100.12634243000008,25.66258732800003],[100.12559879500008,25.66257700600005],[100.12418462100006,25.662557366000045],[100.12251908500008,25.66253421700003],[100.12123366000009,25.662516339000037],[100.11901365400007,25.66226811100006],[100.11627333600007,25.661855040000036],[100.11370462400004,25.66150261100006],[100.11062259000005,25.66112303500006],[100.10774722100007,25.660896828000039],[100.10630526000007,25.660318735000034],[100.10594138400006,25.660107017000028],[100.10451701000005,25.659278242000029],[100.10279833500005,25.65836120000006],[100.10160124000004,25.65837021400006],[100.10066225100008,25.65808464400004],[100.10060652400007,25.658067698000026],[100.10000211300008,25.65787341400005],[100.09986326400008,25.657821354000079],[100.09974980700008,25.65797219700005],[100.09957469700004,25.65820500800004],[100.09950179600009,25.65830193100004],[100.09943971800004,25.658371867000029],[100.09933032100008,25.65849511700003],[100.09924562800006,25.658590542000068],[100.09918321700008,25.65866086400007],[100.09900807500009,25.658858209000074],[100.09892874300005,25.658947596000077],[100.09878567200008,25.659108807000054],[100.09871214000003,25.659191658000056],[100.09846556000008,25.659469494000065],[100.09827827700008,25.65973851600006],[100.09816251100006,25.659904806000044],[100.09805541600008,25.660058639000057],[100.09792749200006,25.660242392000045],[100.09787787000005,25.66031367000005],[100.09769023100006,25.66058319900003],[100.09762074300005,25.66072630000008],[100.09749121700009,25.660993131000056],[100.09747015900007,25.661036541000045],[100.09731406400005,25.66135832300006],[100.09729199900005,25.661403809000036],[100.09717704400004,25.661640781000075],[100.09718010100005,25.66197554300004],[100.09718300300006,25.662293503000059],[100.09718534300004,25.66254998000005],[100.09718830100008,25.662874079000067],[100.09719003900006,25.66306446400006],[100.09721481800006,25.66313354700003],[100.09732565200005,25.66344253400007],[100.09734112300004,25.663485663000079],[100.09744042000006,25.66376248800003],[100.09745831600009,25.663812376000068],[100.09758561900009,25.664167278000038],[100.09764002800006,25.664318956000046],[100.09769509300009,25.664472470000076],[100.09790602900006,25.665060511000037],[100.09803599500003,25.66578634700005],[100.09806606200005,25.665954270000044],[100.09814618500008,25.66640173600007],[100.09815134500008,25.666430554000045],[100.09804025100005,25.667011278000076],[100.09753063600005,25.66736464300004],[100.09746100800004,25.667415084000028],[100.09742746300008,25.66743938600007],[100.09726888600005,25.667554266000026],[100.09676873200005,25.667916599000024],[100.09601489300008,25.66818624600006],[100.09600301800004,25.668194957000027],[100.09597871700004,25.668212781000024],[100.09597850900008,25.66821299800006],[100.09567094200009,25.668439403000038],[100.09550213500006,25.66856387000007],[100.09514863300007,25.668824520000045],[100.09500602800006,25.668943899000057],[100.09487444700005,25.66905404700003],[100.09472097100009,25.669182524000065],[100.09406249600005,25.669733741000074],[100.09387296300008,25.66989323300004],[100.09367114300005,25.670092539000053],[100.09336985700009,25.670390072000033],[100.09296917500007,25.67078575500005],[100.09252551900005,25.671223875000068],[100.09229445600005,25.671452054000047],[100.09226866600005,25.671477522000033],[100.09219920500004,25.671553493000034],[100.09207327100006,25.671692395000038],[100.09188862500008,25.67189649000005],[100.09169035400004,25.672115640000074],[100.09135059100004,25.672491181000056],[100.09126806100005,25.67258271000003],[100.09126730000009,25.67258331800008],[100.09048086600007,25.673460801000034],[100.09030837200004,25.67365367000008],[100.09029570100006,25.67366783800003],[100.09028559000007,25.673687192000047],[100.09020446900007,25.673842456000047],[100.09019124500009,25.673867765000069],[100.09039615700005,25.674230985000066],[100.09051741800005,25.674445930000048],[100.09049527500008,25.674625854000057],[100.09047855300008,25.674761706000028],[100.09046018700008,25.674910946000069],[100.09044116200005,25.67506551500003],[100.09043742800009,25.675095870000065],[100.09043661000006,25.675102519000065],[100.09042945600004,25.67516063200003],[100.09041927800007,25.675243329000069],[100.09040996000005,25.675319039000045],[100.09038431200008,25.675527441000044],[100.09035508800008,25.67576487100007],[100.09036428600007,25.675960625000074],[100.09037422000006,25.676172029000044],[100.09038157600009,25.676328582000055],[100.09040690800004,25.676867662000065],[100.09042610800008,25.67729552000003],[100.09030077600005,25.677909639000064],[100.09029005000008,25.67796220500003],[100.09028926100007,25.67796607100007],[100.09030529600006,25.677970531000029],[100.09037739500008,25.67799057800005],[100.09048260700007,25.678049516000045],[100.09092629500008,25.678298061000079],[100.09101439700004,25.67834741400003],[100.09258449100008,25.679508473000057],[100.09264980600006,25.67955677300006],[100.09296910900008,25.679792891000035],[100.09335302100004,25.68007678500004],[100.09528522500006,25.681461405000055],[100.09717505000003,25.682770691000035],[100.09985741100008,25.684036180000076],[100.10149036500008,25.68462889400007],[100.10420723900006,25.685099970000068],[100.10738279700007,25.68552971200006],[100.10754205900008,25.685617096000045],[100.10935417800005,25.686611339000025],[100.10983953800008,25.68686179200006],[100.11065407600006,25.68728210100005],[100.11228852500006,25.688025932000074],[100.11391229000009,25.68860485400006],[100.11488453400006,25.688951477000044],[100.11668559900005,25.68965617400005],[100.11848879800005,25.690587707000078],[100.11995535700004,25.691219294000065],[100.12204068500006,25.692330592000077],[100.12310292200005,25.69333990000007],[100.12303734300008,25.693760276000036],[100.12237907800005,25.693658985000075],[100.12150676800008,25.69326155600004],[100.12075560500007,25.69326731600006],[100.12045401900008,25.693652481000073],[100.11984647600008,25.69395491000006],[100.11902468800008,25.693939931000047],[100.11792160900007,25.693969642000075],[100.11764546700005,25.694567303000047],[100.11765022500004,25.69457196600007],[100.11764823300007,25.694576276000079],[100.11788515400008,25.69480842900003],[100.11873745200006,25.695715111000028],[100.11880997200007,25.696089804000054],[100.11846103000005,25.69643278800004],[100.11844132000005,25.696837060000065],[100.11844432300006,25.696841188000066],[100.11844408700006,25.696846034000033],[100.11926982200004,25.697981180000057],[100.12028270800005,25.69918342300008],[100.12129229900006,25.700282251000034],[100.12135744400007,25.701334107000038],[100.12058594200005,25.702146691000054],[100.11885810000007,25.70185742800004],[100.11657803200007,25.702026114000036],[100.11563627100009,25.70248705800003],[100.11408333100008,25.70305348700003],[100.11330849100006,25.70351314300007],[100.11236764000006,25.70407489200005],[100.11215159700004,25.70478237100008],[100.11227224000004,25.70578978900005],[100.11227464300004,25.705795727000067],[100.11227500600006,25.70579876200003],[100.11284183200006,25.70719931000008],[100.11285631100009,25.708759933000068],[100.11285907200005,25.708768285000077],[100.11285907700005,25.708768905000058],[100.11337150700007,25.710319069000037],[100.11259911000008,25.71103064600004],[100.11160395000008,25.711744057000034],[100.11032865700008,25.712257920000075],[100.10917211500004,25.713577541000065],[100.10756148500008,25.713942676000046],[100.10611500900007,25.714004050000029],[100.10547486200005,25.71406893900007],[100.10450250600008,25.71416750000003],[100.10451282500009,25.714175708000029],[100.10450527000006,25.714176473000064],[100.10525741800007,25.714774671000045],[100.10607448800005,25.715424495000037],[100.10636133800007,25.716573442000028],[100.10497977300008,25.717642651000064],[100.10465607300006,25.718754269000045],[100.10466008800006,25.718758959000068],[100.10465884000007,25.718763242000024],[100.10555906400004,25.71981518700005],[100.10645604700005,25.72051423000005],[100.10795941700008,25.721355822000079],[100.10741291300008,25.72196007200006],[100.10629980700009,25.721968506000054],[100.10390384200008,25.72168412900004],[100.10334127500005,25.721563466000079],[100.10072501300005,25.72100228100004],[100.09642897300006,25.719874997000035],[100.09639080400007,25.71987370000005],[100.09466351800006,25.71981497400003],[100.09466628300004,25.719823947000064],[100.09517587100004,25.720582241000046],[100.09595470500006,25.721229849000055],[100.09607478100009,25.721352096000034],[100.09656151600007,25.721847628000036],[100.09814915700008,25.722660291000069],[100.09827621000005,25.722680617000039],[100.09946945300006,25.723280274000048],[100.10030052100007,25.724000070000046],[100.10138693200008,25.725091333000024],[100.10226611300004,25.72605968600004],[100.10257711100008,25.726244111000029],[100.10406229700004,25.72712482700007],[100.10555486600004,25.727549171000076],[100.10743887100007,25.728198717000056],[100.11012409200004,25.729117392000036],[100.11019822400005,25.72915035500006],[100.11292341900009,25.73035871600007],[100.11395904200004,25.730895359000045],[100.11486894200005,25.73113022700005],[100.11512991100006,25.731197589000034],[100.11554482000008,25.731194420000067],[100.11561874400008,25.731193855000073],[100.11617765400007,25.73118958400005],[100.11676251100005,25.731278464000075],[100.11678003200007,25.731292394000037],[100.11724707000008,25.731663714000037],[100.11743412000004,25.731460024000059],[100.11742878300004,25.731347438000058],[100.11741273800004,25.73100900000003],[100.11752919700007,25.730603596000038],[100.11790373200006,25.730242890000058],[100.11782946300008,25.729679609000074],[100.11798274100005,25.729538412000069],[100.11894030400004,25.72974058500006],[100.11913193600008,25.729792847000057],[100.11945432900007,25.729853861000036],[100.11987965000009,25.72987394000006],[100.12016228700009,25.729790092000035],[100.12032291700007,25.729660504000039],[100.12037210500006,25.729496036000059],[100.12034815800007,25.72925993000007],[100.12026673400006,25.72907677200004],[100.12022129500008,25.72886708700003],[100.12024063800004,25.728610957000059],[100.12025980100003,25.728335138000039],[100.12023750400005,25.728098798000077],[100.12023566900007,25.728079342000059],[100.12005090800006,25.72797690400006],[100.11943720200009,25.727898030000064],[100.11914560000008,25.727727136000057],[100.11877327500008,25.727280307000059],[100.11876902700004,25.72682526200003],[100.11881292200008,25.72635234500007],[100.11899558500005,25.72625467900008],[100.11916793400008,25.72608708200005],[100.11918553900006,25.725903164000046],[100.11910637100005,25.725702486000047],[100.11904391100006,25.725221632000058],[100.11910581900009,25.724608554000047],[100.11939352400003,25.72437880900003],[100.11966976900006,25.72395662100007],[100.11983065300007,25.723596576000039],[100.12015593500007,25.72325277400006],[100.12034645400007,25.722962513000029],[100.12036613100008,25.722662943000047],[100.12009062100003,25.72235289500003],[100.11989537600005,25.72191261200004],[100.11987270500004,25.721602348000034],[100.11981082800009,25.721328205000078],[100.11974113400004,25.720922780000025],[100.11968076200009,25.720809814000064],[100.11920674500004,25.72067252200003],[100.11889316600008,25.72045832500004],[100.11878976900005,25.72024908000003],[100.11888845000004,25.719952961000048],[100.11911975400006,25.71989211600004],[100.11965818600004,25.72013084500003],[100.11995562000004,25.720167947000048],[100.12025962300004,25.720132797000077],[100.12034247700007,25.720023148000054],[100.12042424600009,25.719914935000078],[100.12046569400008,25.71969801700004],[100.12047748600009,25.71940912900004],[100.12047411200007,25.719048154000065],[100.12079186800009,25.718934136000028],[100.12113166600006,25.718852765000066],[100.12166513500006,25.71875883100006],[100.12204573800006,25.718582780000078],[100.12235642300004,25.718357652000067],[100.12253833300008,25.718181224000039],[100.12255618000006,25.718023560000064],[100.12241896600006,25.71781457800006],[100.12221528900006,25.717685984000075],[100.12202030800006,25.717391801000077],[100.12198948600008,25.717345297000067],[100.12193725100008,25.716925625000046],[100.12192415200008,25.71655816400005],[100.12194576500008,25.716350780000029],[100.12195779700005,25.716024064000068],[100.12208133500008,25.715804326000069],[100.12231430400004,25.71580702700004],[100.12253545200008,25.71580959000005],[100.12295084400006,25.71580639700005],[100.12323975000004,25.71570791000005],[100.12334462000007,25.715558329000034],[100.12332127000008,25.715386214000039],[100.12315608700006,25.715156114000025],[100.12306154300006,25.71492547300005],[100.12298357800006,25.714724241000057],[100.12300416100003,25.714601015000029],[100.12331868000007,25.714529678000078],[100.12373713300008,25.714531384000059],[100.12396962200006,25.714305436000076],[100.12400055700005,25.714090277000027],[100.12397055900004,25.713702461000027],[100.12393570800004,25.71349975000004],[100.12413864900008,25.713354910000076],[100.12424296700005,25.713234708000074],[100.12430003500004,25.712995470000068],[100.12430343400007,25.71265515600004],[100.12426137700004,25.71238683100006],[100.12433526400008,25.711994317000064],[100.12446438100005,25.711855486000048],[100.12480615300007,25.711793783000077],[100.12520415500006,25.71193347700006],[100.12546980800005,25.711867436000039],[100.12561002100007,25.71175313400005],[100.12569594500008,25.711644172000037],[100.12578015700007,25.711353082000075],[100.12573396200009,25.711062997000057],[100.12565465600005,25.710719019000068],[100.12566682700003,25.710465619000048],[100.12586322600004,25.710326797000055],[100.12616724400005,25.710419973000059],[100.12630469900006,25.710501239000054],[100.12647374500004,25.710563930000036],[100.12659384000006,25.71062207700004],[100.12679576300008,25.71071405300006],[100.12701877600007,25.710736947000045],[100.12715958900009,25.710686632000035],[100.12730514200007,25.710562442000027],[100.12740586600006,25.710386543000028],[100.12748987300006,25.709998030000067],[100.12753480000004,25.709638872000029],[100.12768606500004,25.709287646000065],[100.12793483200005,25.709031932000074],[100.12822256500005,25.708810924000035],[100.12850121500009,25.70865124400007],[100.12878919300005,25.708456488000026],[100.12926937600008,25.708155227000078],[100.13010589100009,25.707737441000064],[100.13060481000008,25.707374772000038],[100.13129493500009,25.706800583000076],[100.13158067500007,25.706369549000045],[100.13155737200003,25.706169514000068],[100.13129126400009,25.70590292600008],[100.13129047400008,25.70581935200005],[100.13167041800004,25.70564248100004],[100.13196887000004,25.70553515200004],[100.13220829000005,25.70531451000005],[100.13233270600007,25.705191024000045],[100.13237417800008,25.704944906000038],[100.13214376300005,25.704762032000077],[100.13175718800005,25.704600381000036],[100.13175520500005,25.704390361000038],[100.13181027200005,25.70408363300004],[100.13246674700008,25.70407298500004],[100.13249124400005,25.703875787000074],[100.13252097800006,25.703535268000054],[100.13274951400007,25.703312608000034],[100.13290438600007,25.702965150000069],[100.13279540800005,25.702589887000046],[100.13262966400004,25.70248371300005],[100.13230363100007,25.702110727000048],[100.13187485800006,25.70205570400003],[100.13159053300007,25.70195288800005],[100.13174276700005,25.701706667000054],[100.13202555100009,25.701646134000045],[100.13293146300004,25.701645579000059],[100.13321327200004,25.701482205000049],[100.13329760300008,25.70098283300007],[100.13355318800007,25.700429506000036],[100.13375940300004,25.699762794000038],[100.13380199300008,25.699158611000028],[100.13427436900008,25.699058680000065],[100.13507039600006,25.698151421000039],[100.13526876000008,25.697677300000067],[100.13564139600003,25.69724558300004],[100.13598463700004,25.696770335000055],[100.13624136200008,25.696339516000024],[100.13671948900009,25.695828214000075],[100.13715964000005,25.69538721500004],[100.13764874400005,25.695015848000027],[100.13793649100006,25.695069597000044],[100.13839353100008,25.695123818000075],[100.13886680200005,25.695120134000037],[100.13922167600004,25.694854822000026],[100.13922917600006,25.69462722700007],[100.13926432200008,25.694259390000075],[100.13925175500003,25.693953185000056],[100.13922977900006,25.693673310000066],[100.13914835800007,25.693236369000034],[100.13900746900004,25.692900428000028],[100.13877262600005,25.69251328100006],[100.13858499800004,25.69213004100004],[100.13829302200009,25.691687768000067],[100.13816601500008,25.69142387100004],[100.13812898400005,25.69130434500005],[100.13869242100009,25.691404125000078],[100.13908227800005,25.691520488000039],[100.13963563900006,25.691657304000047],[100.14030339300007,25.69179212000006],[100.14054771200007,25.69180159000007],[100.14076292300007,25.691567083000053],[100.14086849100005,25.691288877000035],[100.14082711300006,25.691000400000065],[100.14080521700004,25.690729276000075],[100.14079141100007,25.690484268000036],[100.14061862300008,25.690173581000069],[100.14072228900005,25.689664111000075],[100.14071273300005,25.68912847400003],[100.14083645800008,25.68893497600004],[100.14127123700007,25.688949086000038],[100.14133788900004,25.68895750200005],[100.14215571300008,25.68906076600007],[100.14234243200008,25.688882057000059],[100.14232063300006,25.688574465000046],[100.14217338200007,25.68846875400004],[100.14183614000007,25.688227742000035],[100.14166437100005,25.68797210100007],[100.14150951600004,25.68761476900005],[100.14135486800007,25.687227000000065],[100.14140972800004,25.68704277000006],[100.14167222300006,25.686865468000066],[100.14194979400009,25.68667931400006],[100.14222246700007,25.68638922400004],[100.14227366300008,25.686117013000059],[100.14213934700007,25.685882966000066],[100.14184831600005,25.685645269000078],[100.14188187000008,25.685111165000025],[100.14216324800003,25.68517545700007],[100.14246689200009,25.685064431000059],[100.14279702400006,25.684858973000077],[100.14295845600008,25.684568913000076],[100.14320714100006,25.684313175000058],[100.14345607500008,25.68408369100007],[100.14376386900006,25.683950011000037],[100.14415758200005,25.683710640000073],[100.14423142200008,25.683351250000045],[100.14442165500008,25.68304346000008],[100.14463245400003,25.68286678100003],[100.14490219800007,25.682794656000057],[100.14520393600009,25.68258936600006],[100.14522588100005,25.682302038000047],[100.14530895900004,25.68189882000007],[100.14550859500008,25.681564699000036],[100.14586458400004,25.681421886000068],[100.14641090400005,25.68125955800008],[100.14673809700008,25.68110873300003],[100.14676365300005,25.680572081000038],[100.14659114500006,25.680208422000076],[100.14643939400009,25.68018573200004],[100.14635267000004,25.68007298200007],[100.14640928100005,25.679791950000039],[100.14653915900004,25.679593924000075],[100.14673743800006,25.67944109600006],[100.14708443300003,25.679368363000039],[100.14749327900006,25.679030654000035],[100.14821592600004,25.677842558000067],[100.14841982400009,25.677619253000047],[100.14865878100005,25.67702227600006],[100.14871635300006,25.67631003400004],[100.14919760600009,25.67546611100005],[100.14929570000004,25.67495192000007],[100.14939580400005,25.67464774700005],[100.14958492200008,25.674226190000068],[100.14991500100007,25.67373351200007],[100.15026097100008,25.673555761000047],[100.15116238200005,25.673560338000074],[100.15152256700009,25.673522498000069],[100.15208708500006,25.673308015000033],[100.15230395600008,25.673096271000078],[100.15257042700006,25.672685768000066],[100.15338337600008,25.67152416400006],[100.15389592900005,25.67126341100004],[100.15445819000007,25.670815564000067],[100.15464055500006,25.669693935000056],[100.15474914400005,25.66893461600006],[100.15471865800004,25.668295200000047],[100.15470076200006,25.66791982500007],[100.15451386900009,25.667613714000028],[100.15427046500008,25.667446487000065],[100.15405805800003,25.66730055500005],[100.15351763800003,25.666862079000056],[100.15341193300009,25.66667461800006],[100.15390148700004,25.666479219000054],[100.15543360400005,25.66646712500005],[100.15726150800004,25.666417669000056],[100.15776194400006,25.66623868000005],[100.15788709600008,25.665864294000074],[100.15803754500007,25.665443031000053],[100.15821070800007,25.66470653700003],[100.15849159100009,25.664459271000056],[100.15872063400008,25.664177410000037],[100.15893804100004,25.664023996000024],[100.15911682400008,25.66387088600004],[100.15916663300006,25.663695463000069],[100.15895377600003,25.66298536100004],[100.15893808800007,25.662693770000034],[100.15931968400008,25.662437012000056],[100.15989211000005,25.662366806000024],[100.16019568400009,25.66242409700004],[100.16063781800006,25.662692523000034],[100.16101799300009,25.662988264000036],[100.16123322100003,25.66306574600003],[100.16139379600009,25.663023526000076],[100.16148416600004,25.66283177100007],[100.16138041100004,25.662277671000028],[100.16160978300008,25.662030807000066],[100.16195649000008,25.66193470500008],[100.16251051100005,25.662076541000034],[100.16310197500008,25.66189059800007],[100.16397664500005,25.661801961000039],[100.16432289600005,25.66165918200005],[100.16434627200005,25.661413955000059],[100.16420182800005,25.661123390000058],[100.16397663700008,25.660471737000024],[100.16375291500003,25.65997176600007],[100.16345579200004,25.659869110000046],[100.16284720600004,25.65951222200005],[100.16216205400008,25.659225949000076],[100.16179708800006,25.659040297000048],[100.16168626600006,25.65898392500003],[100.16147352400009,25.65858964200004],[100.16139357400005,25.65831023000004],[100.16127432700006,25.657961115000036],[100.16120440000008,25.65761634300003],[100.16111111100008,25.65729690300003],[100.16106022900005,25.65712267300006],[100.16139370900004,25.65699167100007],[100.16199923400007,25.657033538000066],[100.16306633500006,25.656960155000037],[100.16365887100005,25.656824170000048],[100.16373662100006,25.65662664500007],[100.16377753000006,25.656363775000047],[100.16372899800007,25.65583907200005],[100.16374799100004,25.655556687000059],[100.16394236600006,25.65543699600005],[100.16440601100003,25.655452997000056],[100.16525815000007,25.655203361000078],[100.16581007600007,25.65461480400006],[100.16653288000004,25.654471208000076],[100.16703729200003,25.65421120700006],[100.16793548000003,25.65423029400006],[100.16837315100008,25.654554981000048],[100.16880591200004,25.654374309000049],[100.16916517300007,25.65408264000007],[100.16955269500005,25.65371854500006],[100.16988285900006,25.65341398100003],[100.16985787800008,25.65307943700003],[100.16973946300004,25.65281784000007],[100.16961532500005,25.652621656000066],[100.16922239500008,25.65252004500007],[100.16898088100004,25.65225943200005],[100.16881056700004,25.651873539000066],[100.16868287400007,25.651401978000025],[100.16839243000003,25.650577286000045],[100.16834426400006,25.650091963000024],[100.16840694700005,25.649835481000026],[100.16867282600004,25.64962332400006],[100.16907076800006,25.649587326000075],[100.16952714800004,25.64960337100007],[100.16982358600007,25.649555057000045],[100.17004716700007,25.649461380000049],[100.17014611400004,25.649211171000048],[100.17012075100007,25.648837249000054],[100.17009969200007,25.648161366000069],[100.17014013600005,25.647852553000065],[100.17017333900009,25.64754379900006],[100.17045889000008,25.64712144600003],[100.17101541900007,25.647011976000046],[100.17144050800005,25.64718554700005],[100.17183946700006,25.64712616100007],[100.17251256400005,25.646822774000044],[100.17303810200008,25.647129046000033],[100.17350069500009,25.647237724000037],[100.17390778500003,25.647294357000076],[100.17400592300004,25.646988021000028],[100.17439956100009,25.64651228400004],[100.17502772200004,25.646323462000056],[100.17545800600004,25.645893373000037],[100.17571341500008,25.64535310800005],[100.17588424400008,25.645049810000044],[100.17646766400009,25.64504104600007],[100.17680038400005,25.644987142000049],[100.17710674100005,25.645045871000037],[100.17746280200004,25.64504368400003],[100.17743934500004,25.644866656000035],[100.17739976300003,25.644553985000074],[100.17684791100004,25.644162478000056],[100.17654095800003,25.644079684000077],[100.17653678600004,25.643653084000055],[100.17658983200005,25.643153824000025],[100.17663000100004,25.642818758000034],[100.17659007400005,25.642438390000053],[100.17665113100009,25.642017829000055],[100.17679388800008,25.641806647000068],[100.17680823900008,25.641487136000025],[100.17664214200005,25.641098998000076],[100.17661701700007,25.640751330000059],[100.17676881200004,25.640723855000034],[100.17706625200003,25.640780535000034],[100.17729820800008,25.640804925000056],[100.17735751700008,25.641050980000047],[100.17733314300004,25.641415058000065],[100.17769778800005,25.64162000600004],[100.17794347300009,25.64162674800008],[100.17823931000004,25.641519350000068],[100.17846920700004,25.641333718000057],[100.17871538700007,25.641331737000028],[100.17903951200003,25.641330932000075],[100.17951292000004,25.64124951100007],[100.17959551700005,25.640996467000038],[100.17969398800006,25.640700312000037],[100.17979374800007,25.64053541900006],[100.18052031900004,25.640548876000027],[100.18071232300008,25.640533882000058],[100.18090586100004,25.640578996000046],[100.18108801700004,25.64077589200008],[100.18128183000005,25.64096660000007],[100.18140361500008,25.64122474000004],[100.18155692300008,25.64135149300006],[100.18169258800003,25.641340553000079],[100.18185967400007,25.641211214000064],[100.18205871300006,25.64101762300004],[100.18228471000004,25.640804122000078],[100.18237393000003,25.640488349000067],[100.18241611400004,25.640360018000025],[100.18294396100004,25.640389124000025],[100.18342495500008,25.640228800000047],[100.18367722500006,25.63992647400005],[100.18426802000005,25.63980847600004],[100.18452707700004,25.63964393200007],[100.18472547900007,25.639386345000049],[100.18453336400006,25.638997766000047],[100.18410540700006,25.63873664500005],[100.18397139800003,25.638363605000053],[100.18408364200008,25.638180557000056],[100.18449741200004,25.637734168000067],[100.18460815100008,25.637398528000064],[100.18474439200009,25.63689531100005],[100.18507985400004,25.636769530000039],[100.18556847400004,25.63675573000006],[100.18610189900005,25.636856135000074],[100.18641726000004,25.636897993000049],[100.18696823300009,25.636965726000029],[100.18742592600006,25.63711954000007],[100.18771257200007,25.63723112400004],[100.18822073700005,25.636949004000035],[100.18845022100003,25.636723979000068],[100.18881074300004,25.636570090000079],[100.18963606800009,25.636556824000026],[100.19004681500008,25.63635657800006],[100.19046944200005,25.635893692000026],[100.19098904900005,25.63571881400003],[100.19132803800005,25.63558478400006],[100.19139933500009,25.635472622000067],[100.19138936500008,25.635197033000059],[100.19115748600007,25.635179229000074],[100.19096748800007,25.63500355900004],[100.19051567500009,25.634711871000037],[100.18970426000004,25.634665958000029],[100.18904605500006,25.63473694100003],[100.18786591100008,25.634746519000033],[100.18734462000004,25.634750747000056],[100.18684602100007,25.634853243000064],[100.18597752600005,25.63489309700003],[100.18541977400008,25.634871359000046],[100.18518802400007,25.634866673000034],[100.18464278800008,25.63475402800003],[100.18421888900008,25.634719063000039],[100.18399206600007,25.634624909000025],[100.18387886700003,25.63452280300004],[100.18368381700008,25.63432309600006],[100.18349764500005,25.63404455500006],[100.18376639400008,25.633884855000077],[100.18451876100005,25.633817511000076],[100.18467097700006,25.63358874100004],[100.18476242600008,25.633071666000036],[100.18476536700007,25.633032429000026],[100.18479656000005,25.632616314000076],[100.18512408400005,25.63254365200004],[100.18629782700003,25.632131581000068],[100.18707922900006,25.63207274100006],[100.18773384100007,25.631883652000057],[100.18801929300008,25.631461267000078],[100.18814046600005,25.63102271100007],[100.18828994400008,25.63085565700004],[100.18850331200008,25.630617200000076],[100.18872386700008,25.63046663600005],[100.18881423100004,25.63056494700004],[100.18884402900005,25.630550441000027],[100.18906784700005,25.630647949000037],[100.18918168500005,25.630916985000057],[100.18946997200006,25.63115940700004],[100.18964169500004,25.63125880000007],[100.18982597500008,25.631282291000049],[100.18998535700007,25.631121500000064],[100.19033906300007,25.630768568000066],[100.19087773700005,25.63057165600003],[100.19155077400007,25.63029488600006],[100.19204057100007,25.630037108000069],[100.19304441100008,25.630020183000057],[100.19372874300007,25.62990958900008],[100.19433393600008,25.629607105000049],[100.19490077500007,25.62933118600006],[100.19497495800005,25.629024281000058],[100.19489345100004,25.628702271000067],[100.19433221200007,25.62846068000005],[100.19393444100007,25.62826264200004],[100.19358572000005,25.628142963000074],[100.19315376400005,25.62805289800008],[100.19308600300008,25.628015960000029],[100.19266660500007,25.62794041500007],[100.19253007600008,25.627801504000048],[100.19255600000008,25.627494993000029],[100.19255140400009,25.627031204000049],[100.19245192700004,25.626734464000039],[100.19213930700005,25.626360697000054],[100.19194966500004,25.625732136000069],[100.19213098600005,25.62552062800006],[100.19217257700007,25.62539072100003],[100.19224335300004,25.625169654000048],[100.19204743900008,25.624882451000077],[100.19177395700007,25.624560872000076],[100.19164586000005,25.624401340000078],[100.19151704600006,25.624370836000027],[100.19108445800004,25.624146410000038],[100.19082402400005,25.624106674000076],[100.19060122000008,25.624089079000045],[100.19038756300006,25.62395954300007],[100.19031601500007,25.623557559000067],[100.19048768400006,25.623346128000038],[100.19095462600007,25.62331361200006],[100.19105684100004,25.623306495000067],[100.19143294500008,25.62326842800007],[100.19182601600005,25.622993936000058],[100.19229353300006,25.622438788000069],[100.19305754600004,25.622280577000028],[100.19335105900007,25.622001355000064],[100.19375446800007,25.621796785000073],[100.19429691500005,25.621984895000027],[100.19467974600008,25.622325698000059],[100.19496381300009,25.622416729000066],[100.19539268500006,25.622483540000077],[100.19570113200007,25.62243726500003],[100.19587339800006,25.62228708400005],[100.19594847700006,25.622174890000055],[100.19594684400005,25.622173614000077],[100.19560308100006,25.62203911200004],[100.19556874800009,25.622026395000036],[100.19481854600008,25.62191257300003],[100.19448942100006,25.621604094000078],[100.19441815700009,25.621340187000045],[100.19450086800004,25.621028350000079],[100.19499649700004,25.620822050000073],[100.19573313200005,25.620691574000039],[100.19617944000004,25.62070348800006],[100.19646976400009,25.62056109300005],[100.19627822400008,25.62028261200004],[100.19589823800006,25.620036785000026],[100.19538020500005,25.619714291000038],[100.19454959500007,25.61902095000005],[100.19449564800004,25.618772459000068],[100.19473171300007,25.618350463000068],[100.19517176100006,25.618218761000038],[100.19585993400006,25.618259091000028],[100.19615634700004,25.618217290000076],[100.19561648100006,25.617801627000064],[100.19538361400004,25.617681007000046],[100.19488805400005,25.617352495000039],[100.19481701600006,25.617003014000035],[100.19554796700004,25.616734508000037],[100.19659995400008,25.616717167000048],[100.19723829300006,25.616843223000048],[100.19733142100006,25.616501155000038],[100.19715498700004,25.616231301000029],[100.19573457700006,25.61608537500007],[100.19514389500006,25.615897663000056],[100.19467929800003,25.615770182000064],[100.19410853100006,25.61564356200006],[100.19402801500006,25.615311662000069],[100.19425688500009,25.615029750000077],[100.19447540800008,25.61467791000007],[100.19452002100008,25.61430998500003],[100.19503078700007,25.61422705600006],[100.19565833200005,25.614239438000028],[100.19615014100003,25.614191667000058],[100.19646508900006,25.613830285000064],[100.19646021800009,25.61334024200005],[100.19620571000009,25.61298351000005],[100.19577781800007,25.612663199000055],[100.19576469100008,25.61231324700003],[100.19585582000008,25.61176991300005],[100.19563827100007,25.611246600000074],[100.19556636800009,25.610809612000027],[100.19542829200008,25.610513189000075],[100.19512337600009,25.610198656000024],[100.19476678000007,25.609993496000074],[100.19433055100007,25.60980452000007],[100.19408718300008,25.609596469000054],[100.19393662700009,25.60937850700003],[100.19379302400006,25.60931719100006],[100.19347497600006,25.609181385000058],[100.19291517900007,25.60929130900007],[100.19233636600007,25.60921690900005],[100.19197822300004,25.609114805000048],[100.19170702900004,25.60902074500007],[100.19160800600008,25.608767757000068],[100.19168218600004,25.608460853000055],[100.19194465700008,25.608361924000066],[100.19225920300005,25.608210115000078],[100.19260761500004,25.608153551000045],[100.19340430900009,25.608227253000054],[100.19343800400009,25.608230371000049],[100.19401227700007,25.608374939000045],[100.19438215600008,25.608491324000057],[100.19497577200008,25.608676032000067],[100.19544225400007,25.60867818400004],[100.19622889800009,25.608407275000049],[100.19640882900007,25.607518989000029],[100.19648843700009,25.60689601300004],[100.19677548300007,25.606426923000073],[100.19687301900007,25.60588159100007],[100.19636911400005,25.605247820000046],[100.19613834300009,25.60447179500005],[100.19635644700009,25.60397215200004],[100.19683221400003,25.603501521000056],[100.19670902400009,25.603191365000045],[100.19634347000005,25.602665370000069],[100.19678414700008,25.602117236000028],[100.19710688700008,25.601787879000029],[100.19701584600007,25.601259644000036],[100.19698478100008,25.59985966000005],[100.19687612400009,25.599284894000048],[100.19752112000004,25.598579508000058],[100.19784168400008,25.598032352000076],[100.19781664100003,25.597239089000028],[100.19748433000007,25.596603918000029],[100.19749437800005,25.595888158000038],[100.19762467100009,25.595186975000048],[100.19771657700005,25.594102985000064],[100.19781333800006,25.593642742000044],[100.19787984200008,25.59305147300006],[100.19784561100005,25.592520101000049],[100.19816960500003,25.59234679800005],[100.19915058100009,25.592004033000025],[100.19988462800007,25.591577956000039],[100.20018344100004,25.591056984000035],[100.20025841400008,25.590590354000029],[100.20039630200006,25.589900045000037],[100.20075353000004,25.589431104000029],[100.20072176900006,25.58914912800003],[100.20036060400008,25.588495725000027],[100.20030438900005,25.587938277000036],[100.20041652600009,25.587569796000027],[100.20042734100008,25.58720214600004],[100.20006391200008,25.58704759400007],[100.19961435400006,25.58696594500003],[100.19948199500004,25.586756991000074],[100.19934156700004,25.586385041000029],[100.19911773800006,25.585873451000056],[100.19858721300006,25.585574402000078],[100.19820088400008,25.585542555000076],[100.19774767500008,25.58525454100004],[100.19755781800007,25.584275923000065],[100.19763072500007,25.583843589000027],[100.19796315200007,25.583630836000056],[100.19850154500007,25.583428070000026],[100.19879421100007,25.58309895600007],[100.19891996900008,25.582806211000049],[100.19881391200005,25.58249202500008],[100.19865477000008,25.582014912000035],[100.19854697600005,25.58152570900006],[100.19825906500006,25.58103797800004],[100.19742988000009,25.58046131900005],[100.19665146800009,25.579814228000033],[100.19708530300005,25.579448958000059],[100.19799758500005,25.579324821000058],[100.19833097400005,25.57921783300003],[100.19881841700006,25.579061404000073],[100.19913761500006,25.578813753000078],[100.19903144500006,25.57848789800005],[100.19840220600008,25.57731450700004],[100.19816600000006,25.576849692000054],[100.19749249900008,25.576400114000024],[100.19728237500005,25.575970088000078],[100.19715813900007,25.57511929100008],[100.19677799700009,25.574410604000037],[100.19647400900004,25.574055420000037],[100.19619215800008,25.57398204200007],[100.19565948800005,25.573893035000024],[100.19533631500008,25.573879841000065],[100.19471033000008,25.57362195500008],[100.19437377200006,25.57330911100007],[100.19386433600005,25.57277190600007],[100.19372280400006,25.572337429000073],[100.19334544900005,25.571949949000044],[100.19282173700008,25.571770118000076],[100.19136918200008,25.571492638000053],[100.19085307500007,25.57143147200003],[100.19001927800008,25.57133265400006],[100.18954392800004,25.571282301000055],[100.18913548200006,25.571612335000056],[100.18824055300007,25.571794151000064],[100.18778270800005,25.571856669000057],[100.18718925000008,25.572512731000076],[100.18664003900006,25.572688115000063],[100.18601136300004,25.57215407500007],[100.18563211100008,25.571920453000076],[100.18505080800009,25.57178050600004],[100.18400766100007,25.571854676000045],[100.18356057300008,25.57209497200006],[100.18283740800007,25.57240387300004],[100.18256928800008,25.57302342400004],[100.18213398500007,25.57298748400007],[100.18085835600005,25.57301090900006],[100.18032285700008,25.573107264000045],[100.17983123500005,25.573242712000025],[100.17947875600004,25.57347949900003],[100.17934472400003,25.573807301000046],[100.17929706400008,25.57419664100007],[100.17886853800008,25.574231203000069],[100.17809502500006,25.573611699000027],[100.17756093200006,25.573852678000038],[100.17624205600004,25.57390270700006],[100.17566472200008,25.57417032400008],[100.17518895200004,25.57441013400006],[100.17451878500003,25.57411375600003],[100.17340414600005,25.57429362000005],[100.17260946800008,25.574576111000057],[100.17219159600006,25.574842440000056],[100.17148634400009,25.575410543000034],[100.17141244400006,25.574866591000047],[100.17127249900006,25.574587660000078],[100.17097832600007,25.574325516000046],[100.16980877500004,25.574322336000024],[100.16901549000005,25.57474944200004],[100.16845072400008,25.574819689000038],[100.16737866800009,25.574907121000025],[100.16616163500004,25.574995699000057],[100.16503120500005,25.57504412800006],[100.16440983900009,25.575259454000049],[100.16348681100004,25.575766456000055],[100.16317465900005,25.575889737000069],[100.16330048700006,25.576230699000065],[100.16347928600006,25.576489734000064],[100.16367422300005,25.577158809000026],[100.16365015600008,25.577656411000079],[100.16365004600005,25.577658680000075],[100.16310152200004,25.57759320300005],[100.16260241100008,25.57742601700005],[100.16220943300005,25.577117825000074],[100.16124751500007,25.57659946600006],[100.16068210000008,25.57660394100003],[100.16032382800006,25.577040707000039],[100.15991877400006,25.577135957000054],[100.15948421700007,25.577178841000039],[100.15894590100004,25.576985853000055],[100.15789953200005,25.576731128000064],[100.15681118700008,25.576634520000029],[100.15629002100008,25.57671752600004],[100.15600967300009,25.576886906000028],[100.15587691400003,25.577354703000024],[100.15567360200004,25.577620798000056],[100.15546477700008,25.577311275000058],[100.15524592600008,25.57669945500004],[100.15473548200004,25.57638788500003],[100.15430256000008,25.57660168600006],[100.15376676900006,25.57667164700007],[100.15315748300009,25.576636990000059],[100.15229934800004,25.57635444500005],[100.15190840900005,25.576410114000056],[100.15121527400004,25.576704844000067],[100.15062788400008,25.57744582300006],[100.15043966000008,25.57747359800004],[100.15014945200005,25.57744957500006],[100.14971250800005,25.57724261000004],[100.14905747200004,25.57697160300006],[100.14878151000005,25.576921167000024],[100.14804136800007,25.576848065000037],[100.14657708200008,25.57685951800005],[100.14606765600007,25.576653106000039],[100.14518004100006,25.576318152000057],[100.14430755400008,25.57604882000004],[100.14375738300004,25.576132009000049],[100.14325195400005,25.576346341000034],[100.14270408100004,25.576403361000076],[100.14229596700005,25.576445835000074],[100.14157007700003,25.57634629000006],[100.14092542100008,25.576107423000054],[100.14000280100004,25.575765554000044],[100.13969314700006,25.57565081200005],[100.13826740100007,25.575135900000079],[100.13746395300007,25.57449780500008],[100.13711688500007,25.574398290000035],[100.13683881900005,25.574318558000074],[100.13654713300008,25.574136725000075],[100.13657092600005,25.573584261000066],[100.13650327200009,25.57333789200004],[100.13648084500005,25.573256220000077],[100.13598669200008,25.57312855200007],[100.13511374900009,25.572806571000056],[100.13498079800006,25.572544608000045],[100.13497746100006,25.572189598000024],[100.13474166800006,25.571783786000024],[100.13417367700004,25.57151203600006],[100.13398113400007,25.571079591000058],[100.13359864800003,25.570490817000065],[100.13242468500005,25.568987685000026],[100.13020205200009,25.56696664100008],[100.12986345100006,25.566919265000025],[100.12958240900008,25.56694462200005],[100.12933474900007,25.566986679000025],[100.12904140000006,25.566988939000056],[100.12890095300009,25.56699001800007]]]]}";
@Before
public void init() throws IOException {
GeometryJSON geometryJson = new GeometryJSON(15);
polygon = geometryJson.read(GEO_JSON);
}
/**
* 获取空间参考系统ID
*/
@Test
public void getSRIDTest() {
polygon.setSRID(4490);
log.info("获取空间参考系统ID:{}", polygon.getSRID());
}
/**
* 获取精度
*/
@Test
public void getPreceisionModelTest() {
PrecisionModel precisionModel = polygon.getPrecisionModel();
log.info("{}", precisionModel);
}
/**
* 获取 Geometry 实际类型
*/
@Test
public void getGeoemtryTypeTest() {
log.info("{}", polygon.getGeometryType());
}
/**
* 获取 用户数据对象(如果有)
*/
@Test
public void getUserDataTest() {
Map<String, Object> userData = new LinkedHashMap<>(3);
userData.put("name", "xxx数据");
userData.put("live", true);
userData.put("lage", 100);
polygon.setUserData(userData);
userData = (Map<String, Object>) polygon.getUserData();
for (Map.Entry<String, Object> item : userData.entrySet()) {
log.info("{} --> {}", item.getKey(), item.getValue());
}
}
/**
* 获取WTK格式数据
*/
@Test
public void getWKTTest() {
log.info("{}", polygon.toText());
log.info("{}", polygon.toString());
}
/**
* 获取 中心
*/
@Test
public void getCenterPointTest() {
List<Coordinate> coordinateList = Arrays.asList(polygon.getEnvelope().getCoordinates());
double xMin = coordinateList.stream().mapToDouble(item -> item.getX()).min().getAsDouble();
double xMax = coordinateList.stream().mapToDouble(item -> item.getX()).max().getAsDouble();
double yMin = coordinateList.stream().mapToDouble(item -> item.getY()).min().getAsDouble();
double yMax = coordinateList.stream().mapToDouble(item -> item.getY()).max().getAsDouble();
Point point = JTSFactoryFinder.getGeometryFactory().createPoint(new Coordinate(xMin + (xMax - xMin) / 2, yMin + (yMax - yMin) / 2));
log.info("{}", point.toText());
}
/**
* 获取 重心
* (不一定在几何体内)
*/
@Test
public void getGravityPointTest() {
double area = 0.0, x = 0.0, y = 0.0;
List<Coordinate> coordinateList = Arrays.asList(polygon.getCoordinates());
for (int i = 1; i < coordinateList.size(); i++) {
double lat = coordinateList.get(i % coordinateList.size()).x;
double lng = coordinateList.get(i % coordinateList.size()).y;
double nextLat = coordinateList.get(i - 1).x;
double nextLng = coordinateList.get(i - 1).y;
double temp = (lat * nextLng - lng * nextLat) / 2.0;
area += temp;
x += temp * (lat + nextLat) / 3.0;
y += temp * (lng + nextLng) / 3.0;
}
Point point = JTSFactoryFinder.getGeometryFactory().createPoint(new Coordinate(x / area, y / area));
log.info("{}", point.toText());
}
/**
* 获取 质心(在几何体内)
*/
@Test
public void getCentroidPointTest() {
log.info("{}", polygon.getCentroid());
}
/**
* 获取 几何体的中心
*/
@Test
public void getInteriorPointTest() {
log.info("{}", polygon.getInteriorPoint());
}
/**
* 获取周长与面积
*/
@Test
public void getLengthAndAreaTest() throws Exception {
// 需转换为投影坐标计算
Geometry geometry = GeoToolsUtil.getInstance().fromGeometry(polygon).transformCoordinates("EPSG:4490", "EPSG:4522");
log.info("周长:{}", geometry.getLength());
log.info("面积:{}", geometry.getArea());
}
/**
* 获取边界
*/
@Test
public void getBoundaryTest() {
Geometry polygonBoundary = polygon.getBoundary();
log.info("{}", polygonBoundary.toText());
}
/**
* 获取四至
*/
@Test
public void getEnvelopeTest() {
Geometry geometry = polygon.getEnvelope();
Envelope envelope = polygon.getEnvelopeInternal();
log.info("{}", geometry.toText());
log.info("{}", envelope.toString());
}
}
import lombok.extern.slf4j.Slf4j;
import org.geotools.geojson.geom.GeometryJSON;
import org.geotools.geometry.jts.JTSFactoryFinder;
import org.junit.Test;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.LinearRing;
import org.locationtech.jts.geom.Polygon;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
@Slf4j
public class GeoJsonDemo {
/**
* 导出 GeoJSON
* @throws IOException
*/
@Test
public void exportGeoJson() throws IOException {
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
LinearRing ring = geometryFactory.createLinearRing(new Coordinate[]{new Coordinate(4, 0), new Coordinate(2, 2), new Coordinate(4, 4), new Coordinate(6, 2), new Coordinate(4, 0)});
// 挖空区域
LinearRing[] holes = null;
Polygon polygon = geometryFactory.createPolygon(ring, holes);
StringWriter writer = new StringWriter();
GeometryJSON geometryJson = new GeometryJSON(15);
geometryJson.write(polygon, writer);
log.info("{}", writer);
}
/**
* 导入 GeoJSON
*/
@Test
public void importGeoJson() throws IOException {
String geoJSON = "{\"type\":\"Polygon\",\"coordinates\":[[[4,0.0],[2,2],[4,4],[6,2],[4,0.0]]]}";
GeometryJSON geometryJson = new GeometryJSON(15);
Polygon polygon = (Polygon) geometryJson.read(new StringReader(geoJSON));
log.info("{}", polygon);
}
}
import com.example.geotool.demo.utils.GeoToolsUtil;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.locationtech.jts.geom.Geometry;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
@Slf4j
public class ShapeFileDemo {
private static final String GEO_JSON_1 = "{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"properties\":{\"id\":\"1\",\"name\":\"test1\"},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[102.66448974609375,25.075648445630527],[102.66860961914062,25.03210571563096],[102.70362854003906,25.012195317781785],[102.74620056152344,25.017795443591762],[102.74482727050781,25.06072125231416],[102.73452758789062,25.07502651556338],[102.7056884765625,25.084977017545775],[102.68234252929688,25.080001867649944],[102.66448974609375,25.075648445630527]]]}}]}";
private static final String GEO_JSON_2 = "{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"properties\":{\"id\":\"2\",\"name\":\"test2\"},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[102.66448974609375,25.075648445630527],[102.66860961914062,25.03210571563096],[102.70362854003906,25.012195317781785],[102.74620056152344,25.017795443591762],[102.74482727050781,25.06072125231416],[102.73452758789062,25.07502651556338],[102.7056884765625,25.084977017545775],[102.68234252929688,25.080001867649944],[102.66448974609375,25.075648445630527]]]}}]}";
private static final String GEO_JSON_3 = "{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"properties\":{\"id\":\"3\",\"name\":\"test3\"},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[102.66448974609375,25.075648445630527],[102.66860961914062,25.03210571563096],[102.70362854003906,25.012195317781785],[102.74620056152344,25.017795443591762],[102.74482727050781,25.06072125231416],[102.73452758789062,25.07502651556338],[102.7056884765625,25.084977017545775],[102.68234252929688,25.080001867649944],[102.66448974609375,25.075648445630527]]]}}]}";
@Test
public void exportShapeFile() {
List<String> featureList = new ArrayList(3);
featureList.add(GEO_JSON_1);
featureList.add(GEO_JSON_2);
featureList.add(GEO_JSON_3);
File path = GeoToolsUtil.toShapeFile(featureList, "F:/temp/test_3.shp");
log.info("{}", path.getPath());
}
@Test
public void importShapeFile() {
File shapeFile = new File("F:/temp/test_3/test_3.shp");
for (Geometry geometry : GeoToolsUtil.fromShapeFile(shapeFile)) {
log.info("{}", geometry);
}
}
}
import lombok.extern.slf4j.Slf4j;
import org.geotools.geometry.jts.JTSFactoryFinder;
import org.junit.Test;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.LinearRing;
import org.locationtech.jts.geom.Polygon;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKBReader;
import org.locationtech.jts.io.WKBWriter;
import java.io.IOException;
@Slf4j
public class WKBDemo {
/**
* 导出 WKB
* @throws IOException
*/
@Test
public void exportWKB() {
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
LinearRing ring = geometryFactory.createLinearRing(new Coordinate[]{new Coordinate(4, 0), new Coordinate(2, 2), new Coordinate(4, 4), new Coordinate(6, 2), new Coordinate(4, 0)});
// 挖空区域
LinearRing[] holes = null;
Polygon polygon = geometryFactory.createPolygon(ring, holes);
WKBWriter writer = new WKBWriter();
byte[] write = writer.write(polygon);
log.info("{}", write);
}
/**
* 导入 WKB
*/
@Test
public void importGeoWKB() throws ParseException {
byte[] wkb = new byte[]{0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 5, 64, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64, 16, 0, 0, 0, 0, 0, 0, 64, 16, 0, 0, 0, 0, 0, 0, 64, 24, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
WKBReader reader = new WKBReader();
Polygon polygon = (Polygon) reader.read(wkb);
log.info("{}", polygon);
}
}
import lombok.extern.slf4j.Slf4j;
import org.geotools.geometry.jts.JTSFactoryFinder;
import org.junit.Test;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.LinearRing;
import org.locationtech.jts.geom.Polygon;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKTReader;
import java.io.IOException;
@Slf4j
public class WKTDemo {
/**
* 导出 WKT
* @throws IOException
*/
@Test
public void exportWKT() throws IOException {
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
LinearRing ring = geometryFactory.createLinearRing(new Coordinate[]{new Coordinate(4, 0), new Coordinate(2, 2), new Coordinate(4, 4), new Coordinate(6, 2), new Coordinate(4, 0)});
// 挖空区域
LinearRing[] holes = null;
Polygon polygon = geometryFactory.createPolygon(ring, holes);
String wkt = polygon.toText();
log.info("{}", wkt);
}
/**
* 导入 WKT
*/
@Test
public void importGeoWKT() throws ParseException {
String wkt = "POLYGON ((4 0, 2 2, 4 4, 6 2, 4 0))";
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
WKTReader reader = new WKTReader(geometryFactory);
Polygon polygon = (Polygon) reader.read(wkt);
log.info("{}", polygon);
}
}
import lombok.extern.slf4j.Slf4j;
import org.geotools.geojson.geom.GeometryJSON;
import org.junit.Before;
import org.junit.Test;
import org.locationtech.jts.geom.LineString;
import org.locationtech.jts.geom.Polygon;
import java.io.IOException;
@Slf4j
public class TopologicalDemo {
private static final String POLYGON_GEO_JSON = "{\"type\":\"Polygon\",\"coordinates\":[[[0,4],[4,0],[10,2],[12,6],[8,12],[2,10],[0,4]]]}";
private static final String LINE_GEO_JSON_1 = "{\"type\":\"LineString\",\"coordinates\":[[1,15],[3.5,10.5],[6.5,11.5],[18,11.5]]}";
private static final String LINE_GEO_JSON_2 = "{\"type\":\"LineString\",\"coordinates\":[[-2,10],[1,7]]}";
private static final String POLYGON_GEO_JSON_1 = "{\"type\":\"Polygon\",\"coordinates\":[[[8,8],[8,4],[10,2],[14,2],[16,4],[16,8],[14,10],[10,10],[8,8]]]}";
private static final String POLYGON_GEO_JSON_2 = "{\"type\":\"Polygon\",\"coordinates\":[[[1,3],[0,0],[3,1],[1,3]]]}";
private static Polygon polygon = null;
private static LineString line1 = null;
private static LineString line2 = null;
private static Polygon polygon1 = null;
private static Polygon polygon2 = null;
@Before
public void init() throws IOException {
GeometryJSON geometryJson = new GeometryJSON(15);
polygon = (Polygon) geometryJson.read(POLYGON_GEO_JSON);
line1 = (LineString) geometryJson.read(LINE_GEO_JSON_1);
line2 = (LineString) geometryJson.read(LINE_GEO_JSON_2);
polygon1 = (Polygon) geometryJson.read(POLYGON_GEO_JSON_1);
polygon2 = (Polygon) geometryJson.read(POLYGON_GEO_JSON_2);
}
@Test
public void distanceTest() {
log.info("相距:{}", polygon.distance(polygon));
log.info("相距:{}", polygon.distance(line1));
log.info("相距:{}", polygon.distance(line2));
log.info("相距:{}", polygon.distance(polygon1));
log.info("相距:{}", polygon.distance(polygon2));
}
@Test
public void bufferTest() {
log.info("缓冲前的几何体:{}", polygon);
log.info("缓冲后的几何体:{}", polygon.buffer(10));
}
@Test
public void intersectionTest() {
log.info("相交的几何体:{}", polygon.intersection(polygon));
log.info("相交的几何体:{}", polygon.intersection(line1));
log.info("相交的几何体:{}", polygon.intersection(line2));
log.info("相交的几何体:{}", polygon.intersection(polygon1));
log.info("相交的几何体:{}", polygon.intersection(polygon2));
}
@Test
public void unionTest() {
log.info("合并的几何体:{}", polygon.union(polygon));
log.info("合并的几何体:{}", polygon.union(line1));
log.info("合并的几何体:{}", polygon.union(line2));
log.info("合并的几何体:{}", polygon.union(polygon1));
log.info("合并的几何体:{}", polygon.union(polygon2));
}
@Test
public void differenceTest() {
log.info("差异的几何体:{}", polygon.difference(polygon));
log.info("差异的几何体:{}", polygon.difference(line1));
log.info("差异的几何体:{}", polygon.difference(line2));
log.info("差异的几何体:{}", polygon.difference(polygon1));
log.info("差异的几何体:{}", polygon.difference(polygon2));
}
@Test
public void symDifferenceTest() {
log.info("符号差异的几何体:{}", polygon.symDifference(polygon));
log.info("符号差异的几何体:{}", polygon.symDifference(line1));
log.info("符号差异的几何体:{}", polygon.symDifference(line2));
log.info("符号差异的几何体:{}", polygon.symDifference(polygon1));
log.info("符号差异的几何体:{}", polygon.symDifference(polygon2));
}
}
import lombok.extern.slf4j.Slf4j;
import org.geotools.geojson.geom.GeometryJSON;
import org.junit.Before;
import org.junit.Test;
import org.locationtech.jts.geom.Polygon;
import java.io.IOException;
@Slf4j
public class RelationalDemo {
private static final String POLYGON_GEO_JSON_1 = "{\"type\":\"Polygon\",\"coordinates\":[[[58.71093750000001,51.39920565355378],[137.4609375,55.3791104480105],[136.7578125,17.308687886770034],[78.046875,28.92163128242129],[58.71093750000001,51.39920565355378]]]}";
private static final String POLYGON_GEO_JSON_2 = "{\"type\":\"Polygon\",\"coordinates\":[[[94.21875,26.115985925333536],[106.5234375,27.059125784374068],[107.9296875,16.97274101999902],[87.1875,0.3515602939922709],[89.6484375,20.3034175184893],[94.21875,26.115985925333536]]]}";
private static final String POLYGON_GEO_JSON_3 = "{\"type\":\"Polygon\",\"coordinates\":[[[102.63427734374999,25.562265014427492],[103.7548828125,25.661333498952683],[104.26025390625,24.50714328310284],[102.81005859375,24.10664717920179],[102.63427734374999,25.562265014427492]]]}";
private static Polygon polygon1 = null;
private static Polygon polygon2 = null;
private static Polygon polygon3 = null;
@Before
public void init() throws IOException {
GeometryJSON geometryJson = new GeometryJSON(15);
polygon1 = (Polygon) geometryJson.read(POLYGON_GEO_JSON_1);
polygon2 = (Polygon) geometryJson.read(POLYGON_GEO_JSON_2);
polygon3 = (Polygon) geometryJson.read(POLYGON_GEO_JSON_3);
}
@Test
public void containsAndWithinTest() {
log.info("是否包含:{}", polygon1.contains(polygon2));
log.info("是否在内部:{}", polygon1.within(polygon2));
log.info("是否包含:{}", polygon1.contains(polygon3));
log.info("是否在内部:{}", polygon1.within(polygon3));
}
@Test
public void crossesAndIntersectsAndDisjointTest() {
log.info("是否相交:{}", polygon1.crosses(polygon2));
log.info("是否相交:{}", polygon1.intersects(polygon2));
log.info("是否不相交:{}", polygon1.disjoint(polygon2));
log.info("是否相交:{}", polygon1.crosses(polygon3));
log.info("是否相交:{}", polygon1.intersects(polygon3));
log.info("是否不相交:{}", polygon1.disjoint(polygon3));
}
@Test
public void equalsTest() {
log.info("是否相等:{}", polygon1.equals(polygon1));
log.info("是否相等:{}", polygon1.equals(polygon2));
log.info("是否完全相等:{}", polygon1.equalsExact(polygon1));
log.info("是否完全相等:{}", polygon1.equalsExact(polygon2));
}
@Test
public void overlapsAndCoversTest() {
log.info("是否重叠:{}", polygon1.overlaps(polygon2));
log.info("是否重叠:{}", polygon1.overlaps(polygon3));
log.info("是否重叠:{}", polygon1.overlaps(polygon1));
log.info("是否覆盖:{}", polygon1.covers(polygon2));
log.info("是否覆盖:{}", polygon1.covers(polygon3));
log.info("是否覆盖:{}", polygon1.covers(polygon1));
log.info("是否被覆盖:{}", polygon1.coveredBy(polygon2));
log.info("是否被覆盖:{}", polygon1.coveredBy(polygon3));
log.info("是否被覆盖:{}", polygon1.coveredBy(polygon1));
}
@Test
public void touchesTest() {
log.info("是否接触:{}", polygon1.touches(polygon2));
log.info("是否接触:{}", polygon1.touches(polygon3));
log.info("是否接触:{}", polygon1.touches(polygon1));
}
@Test
public void relateTest() {
log.info("DE-9IM 关系:{}", polygon1.relate(polygon2));
log.info("DE-9IM 关系:{}", polygon1.relate(polygon3));
log.info("DE-9IM 关系:{}", polygon1.relate(polygon1));
// 待验证的关系
String pattern = "2FFF1FFF2";
log.info("DE-9IM 关系检查:{}", polygon1.relate(polygon2, pattern));
log.info("DE-9IM 关系检查:{}", polygon1.relate(polygon3, pattern));
log.info("DE-9IM 关系检查:{}", polygon1.relate(polygon1, pattern));
}
}