使用java工具进行CQL查询within

问题描述 投票:-1回答:1

我需要找出某地1000米范围内的所有餐馆.我的餐馆层就是 引用:餐厅位置坐标为- 76.10, 10.51

我使用以下代码

GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
String getCapabilities = http://localhost:8080/geoserver/ows?service=wfs&version=1.1.0&request=GetCapabilities";
Map<String, Serializable> connectionParameters = new HashMap<>();
connectionParameters.put(WFSDataStoreFactory.URL.key, getCapabilities);
WFSDataStoreFactory dsf = new WFSDataStoreFactory();
WFSDataStore dataStore = dsf.createDataStore(connectionParameters);
String types[] = dataStore.getTypeNames();

String name = "cite:restaurents";
Point point = geometryFactory.createPoint(new Coordinate(76.10, 10.51));
// Filter filter = CQL.toFilter(String.format("DWITHIN(%s, POINT(76.10
// 10.51),1000, meters)", "geom"));
FilterFactory2 filterFactory = CommonFactoryFinder.getFilterFactory2();
Filter filter = filterFactory.dwithin(filterFactory.property("the_geom"), filterFactory.literal(point),
        1000, "meters");

SimpleFeatureSource source = dataStore.getFeatureSource(name);
source.getBounds();

SimpleFeatureCollection fc = source.getFeatures(filter);

SimpleFeatureIterator itr = fc.features();
while (itr.hasNext()) {
    SimpleFeature sf = itr.next();

    System.out.println(sf);
}

异常

[[java.lang.RuntimeException: Parsing failed for Distance: java.lang.NullPointerException
Parsing failed for Distance: java.lang.NullPointerException]]
at org.geotools.data.wfs.v1_1_0.parsers.ExceptionReportParser.parse(ExceptionReportParser.java:103) ~[gt-wfs-15.2.jar:na]
at org.geotools.data.wfs.protocol.wfs.WFSExtensions.process(WFSExtensions.java:86) ~[gt-wfs-15.2.jar:na]
at org.geotools.data.wfs.v1_1_0.WFS_1_1_0_DataStore.getFeatureReader(WFS_1_1_0_DataStore.java:449) ~[gt-wfs-15.2.jar:na]
at org.geotools.data.wfs.v1_1_0.WFSFeatureCollection.reader(WFSFeatureCollection.java:172) ~[gt-wfs-15.2.jar:na]
at org.geotools.data.store.DataFeatureCollection.openIterator(DataFeatureCollection.java:230) ~[gt-main-15.2.jar:na]
at org.geotools.data.store.DataFeatureCollection.iterator(DataFeatureCollection.java:198) ~[gt-main-15.2.jar:na]
at org.geotools.data.store.DataFeatureCollection.features(DataFeatureCollection.java:187) ~[gt-main-15.2.jar:na]
at com.hamdhan.geotooltest.controller.LayerController.TestGeoToolsRestAPI(LayerController.java:85) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_252]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_252]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_252]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_252]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105) ~[spring-webmvc-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:879) ~[spring-webmvc-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) ~[spring-webmvc-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.6.RELEASE.jar:5.2.6.RELEASE]

请看下面的依赖关系https:/maven.apache.orgxsdmaven-4.0.0.xsd"> 4.0.0 org.springframework.boot spring-boot-starter-parent 2.3.0.RELEASE com.hamdhan geotooltest 0.0.1-SNAPSHOT war geotooltest 地理工具测试。

<properties>
    <java.version>1.8</java.version>
    <geotools.version>15.2</geotools.version>
    <geotools-swing.version>15.2</geotools-swing.version>
    <geotools-shapefile.version>15.2</geotools-shapefile.version>
</properties>

<dependencies>
     <dependency>
        <groupId>org.geotools</groupId>
        <artifactId>gt-shapefile</artifactId>
        <version>${geotools-shapefile.version}</version>
    </dependency>
    <dependency>
        <groupId>org.geotools</groupId>
        <artifactId>gt-wfs</artifactId>
        <version>15.2</version>
    </dependency>
    <dependency>
        <groupId>org.geotools</groupId>
        <artifactId>gt-cql</artifactId>
        <version>15.2</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>
 <repositories>
   <!--  <repository>
        <id>osgeo</id>
        <name>Open Source Geospatial Foundation Repository</name>
        <url>http://download.osgeo.org/webdav/geotools/</url>
    </repository> -->
    <repository>
    <id>osgeo</id>
    <name>OSGeo Release Repository</name>
    <url>https://repo.osgeo.org/repository/release/</url>
    <snapshots><enabled>false</enabled></snapshots>
    <releases><enabled>true</enabled></releases>
  </repository>
</repositories>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

java geoserver geotools
1个回答
0
投票

你可以将其设置为CQL过滤器或使用 FilterFactory 但根据你选择的方式不同,规则也不同。

你可以使用CQL(既快又简单)。

Filter filter = CQL.toFilter("dwithin(\"the_geom\","+point+", 1000, meters)");
© www.soinside.com 2019 - 2024. All rights reserved.