OpenLayers и PostGIS. Проблема с wfs-t

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
eugene.krivobokov
Новоприбывший
Сообщения: 4
Зарегистрирован: 25 янв 2011, 11:41
Репутация: 0

OpenLayers и PostGIS. Проблема с wfs-t

Сообщение eugene.krivobokov »

Доброго времени суток.
Только начал работать с картографией. Просьба сильно не пинать)
Возникла проблема при работе с wfs. Приведу исходные данные.
Использую PostGIS 8.4.6.
Создал таблицу с тестовыми данными:

Код: Выделить всё

create table gis_schema.roads (ID int4 not null, NAME varchar(50), TYPE varchar(20));
ALTER TABLE gis_schema.roads ADD CONSTRAINT roads_pkey PRIMARY KEY (ID); 

alter table gis_schema.roads owner to gis;
GRANT all privileges on table gis_schema.roads to gis;

SELECT AddGeometryColumn('gis_schema','roads', 'geom', 4326, 'MULTIPOLYGON', 2);

insert into gis_schema.roads (ID, NAME, TYPE, geom) values (1, 'Дом 1','type1',GeomFromText('MULTIPOLYGON(((1 1,1.5 2,2 1.4,1 1)))', 4326));
insert into gis_schema.roads (ID, NAME, TYPE, geom) values (2, 'Дом 2','type1',GeomFromText('MULTIPOLYGON(((1 3,1 4,2 4,2 3,1 3)))', 4326));
insert into gis_schema.roads (ID, NAME, TYPE, geom) values (3, 'Дом 3','type2',GeomFromText('MULTIPOLYGON(((3 2,3 3,4 4,4 1,3 2)))', 4326));
insert into gis_schema.roads (ID, NAME, TYPE, geom) values (4, 'Дом 4','type2',GeomFromText('MULTIPOLYGON(((2.2 2.2,2.2 3,2.8 3,2.8 2.2,2.2 2.2)))', 4326));
GeoServer 2.0.2:
Layer "roads":

Код: Выделить всё

<featureType>
  <id>FeatureTypeInfoImpl-3587040a:12dbc50b6da:-7ff5</id>
  <name>roads</name>
  <nativeName>roads</nativeName>
  <namespace>
    <id>NamespaceInfoImpl--2f6128a2:12dbc3652b2:-7fff</id>
  </namespace>
  <title>roads</title>
  <nativeCRS>GEOGCS["WGS 84", 
  DATUM["World Geodetic System 1984", 
    SPHEROID["WGS 84", 6378137.0, 298.257223563, AUTHORITY["EPSG","7030"]], 
    AUTHORITY["EPSG","6326"]], 
  PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], 
  UNIT["degree", 0.017453292519943295], 
  AXIS["Geodetic longitude", EAST], 
  AXIS["Geodetic latitude", NORTH], 
  AUTHORITY["EPSG","4326"]]</nativeCRS>
  <srs>EPSG:4326</srs>
  <nativeBoundingBox>
    <minx>1.0</minx>
    <maxx>4.0</maxx>
    <miny>1.0</miny>
    <maxy>4.0</maxy>
    <crs>EPSG:4326</crs>
  </nativeBoundingBox>
  <latLonBoundingBox>
    <minx>1.0</minx>
    <maxx>4.0</maxx>
    <miny>1.0</miny>
    <maxy>4.0</maxy>
  </latLonBoundingBox>
  <projectionPolicy>FORCE_DECLARED</projectionPolicy>
  <enabled>true</enabled>
  <metadata>
    <entry key="cachingEnabled">false</entry>
  </metadata>
  <store class="dataStore">
    <id>DataStoreInfoImpl--2f6128a2:12dbc3652b2:-7ffe</id>
  </store>
  <maxFeatures>0</maxFeatures>
  <numDecimals>0</numDecimals>
</featureType>
Использую OpenLayers 2.10 (Revision: 10721).
Страница с картой:

Код: Выделить всё

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <link rel="stylesheet" type="text/css" href="style.css">
        <script src="OpenLayers.js" type="text/javascript"></script>
        <script src="init.js" type="text/javascript"></script>
        <script type="text/javascript">
            function init(){
                createMap();
            }
        </script>
    </head>
    <body onload="init()">
        <h3>Index2</h3>
        <div id="map"></div>        
    </body>
</html>
Скрипт создания ("init.js"):

Код: Выделить всё

var map;
var wfs;

var bounds = new OpenLayers.Bounds(
    1,1,
    4,4
    );

var options = {
    maxExtent: bounds,
    projection: "EPSG:4326"
};
    
function createMap(){
    map = new OpenLayers.Map("map", options);

    wfs = new OpenLayers.Layer.Vector("WFS", {
        strategies: [new OpenLayers.Strategy.BBOX(), new OpenLayers.Strategy.Save({auto:true})],
        projection: new OpenLayers.Projection("EPSG:4326"),
        isBaseLayer: true,        
        protocol: new OpenLayers.Protocol.WFS({
            version: "1.0.0",
            url: "http://localhost:8084/geoserver202/wfs",
            featureNS :  "/rostov",    //
            featureType: "roads",       // 
            srsName: "EPSG:4326",
            geometryName: "geom",
            //schema: "http://localhost:8084/geoserver202/wfs?service=WFS?version=1.0.0?request=DescribeFeatureType?typeName=rostovWorkspace?roads" 
        })
    });    
    map.addLayers([wfs]);
    map.addControl(new OpenLayers.Control.LayerSwitcher());
    map.addControl(new OpenLayers.Control.EditingToolbar(wfs));
    map.zoomToMaxExtent(bounds);
}
Карта отображается.
Ответ сервера:

Код: Выделить всё

<?xml version="1.0" encoding="UTF-8"?>
<wfs:FeatureCollection xmlns="http://www.opengis.net/wfs" xmlns:wfs="http://www.opengis.net/wfs" xmlns:rostovWorkspace="/rostov" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="/rostov http://localhost:8084/geoserver202/wfs?service=WFS&version=1.0.0&request=DescribeFeatureType&typeName=rostovWorkspace%3Aroads http://www.opengis.net/wfs http://localhost:8084/geoserver202/schemas/wfs/1.0.0/WFS-basic.xsd">
    <gml:boundedBy>
        <gml:null>unknown</gml:null>
    </gml:boundedBy>
    <gml:featureMember>
        <rostovWorkspace:roads fid="roads.1">
            <rostovWorkspace:name>Дом 1</rostovWorkspace:name>
            <rostovWorkspace:type>type1</rostovWorkspace:type>
            <rostovWorkspace:geom>
                <gml:MultiPolygon srsName="urn:x-ogc:def:crs:EPSG:4326">
                    <gml:polygonMember>
                        <gml:Polygon>
                            <gml:outerBoundaryIs>
                                <gml:LinearRing>
                                    <gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">1,1 1.5,2 2,1.4 1,1</gml:coordinates>
                                </gml:LinearRing>
                            </gml:outerBoundaryIs>
                        </gml:Polygon>
                    </gml:polygonMember>
                </gml:MultiPolygon>
            </rostovWorkspace:geom>
        </rostovWorkspace:roads>
    </gml:featureMember>
    <gml:featureMember>
        <rostovWorkspace:roads fid="roads.2">
            <rostovWorkspace:name>Дом 2</rostovWorkspace:name>
            <rostovWorkspace:type>type1</rostovWorkspace:type>
            <rostovWorkspace:geom>
                <gml:MultiPolygon srsName="urn:x-ogc:def:crs:EPSG:4326">
                    <gml:polygonMember>
                        <gml:Polygon>
                            <gml:outerBoundaryIs>
                                <gml:LinearRing>
                                    <gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">1,3 1,4 2,4 2,3 1,3</gml:coordinates>
                                </gml:LinearRing>
                            </gml:outerBoundaryIs>
                        </gml:Polygon>
                    </gml:polygonMember>
                </gml:MultiPolygon>
            </rostovWorkspace:geom>
        </rostovWorkspace:roads>
    </gml:featureMember>
    <gml:featureMember>
        <rostovWorkspace:roads fid="roads.3">
            <rostovWorkspace:name>Дом 3</rostovWorkspace:name>
            <rostovWorkspace:type>type2</rostovWorkspace:type>
            <rostovWorkspace:geom>
                <gml:MultiPolygon srsName="urn:x-ogc:def:crs:EPSG:4326">
                    <gml:polygonMember>
                        <gml:Polygon>
                            <gml:outerBoundaryIs>
                                <gml:LinearRing>
                                    <gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">3,2 3,3 4,4 4,1 3,2</gml:coordinates>
                                </gml:LinearRing>
                            </gml:outerBoundaryIs>
                        </gml:Polygon>
                    </gml:polygonMember>
                </gml:MultiPolygon>
            </rostovWorkspace:geom>
        </rostovWorkspace:roads>
    </gml:featureMember>
    <gml:featureMember>
        <rostovWorkspace:roads fid="roads.4">
            <rostovWorkspace:name>Дом 4</rostovWorkspace:name>
            <rostovWorkspace:type>type2</rostovWorkspace:type>
            <rostovWorkspace:geom>
                <gml:MultiPolygon srsName="urn:x-ogc:def:crs:EPSG:4326">
                    <gml:polygonMember>
                        <gml:Polygon>
                            <gml:outerBoundaryIs>
                                <gml:LinearRing>
                                    <gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">2.2,2.2 2.2,3 2.8,3 2.8,2.2 2.2,2.2</gml:coordinates>
                                </gml:LinearRing>
                            </gml:outerBoundaryIs>
                        </gml:Polygon>
                    </gml:polygonMember>
                </gml:MultiPolygon>
            </rostovWorkspace:geom>
        </rostovWorkspace:roads>
    </gml:featureMember>
</wfs:FeatureCollection>
Если установить свойство shema = "http://localhost:8084/geoserver202/wfs? ... pace?roads", то вылетает исключение, но карта отображатся.

Код: Выделить всё

25 Jan 12:26:54 INFO [geoserver.wfs] - 
Request: getServiceInfo
25 Jan 12:26:54 ERROR [geoserver.ows] - 
org.geoserver.platform.ServiceException: No service: ( WFS?version=1.0.0?request=DescribeFeatureType?typeName=rostovWorkspace?roads )
        at org.geoserver.ows.Dispatcher.findService(Dispatcher.java:776)
        at org.geoserver.ows.Dispatcher.service(Dispatcher.java:381)
        at org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:214)
        at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
        at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.vfny.geoserver.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265)
        at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
        at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
        at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:124)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
        at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
        at org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:174)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
        at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
        at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149)
        at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:73)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.geoserver.filters.ReverseProxyFilter.doFilter(ReverseProxyFilter.java:183)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:47)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:662)
25 Jan 12:26:54 INFO [geoserver.wfs] - 
Request: getFeature
        handle = null
        service = WFS
        version = 1.0.0
        baseUrl = http://localhost:8084/geoserver202/
        providedVersion = null
        query = [net.opengis.wfs.impl.QueryTypeImpl@ead0c0 (group: null, propertyName: null, function: null, filter: [ geom bbox POLYGON ((-3.125 -3.125, -3.125 8.125, 8.125 8.125, 8.125 -3.125, -3.125 -3.125)) ], sortBy: null, featureVersion: null, handle: null, srsName: null, typeName: [{/rostov}roads])]
        maxFeatures = null
        outputFormat = GML2
        resultType = results
        traverseXlinkDepth = null
        traverseXlinkExpiry = null
        formatOptions = {}
Значение свойства взял из параметра <wfs:FeatureCollection xsi:schemaLocation >.
Это правильно?

При добавлении полигона на карту возникает ошибка:

Код: Выделить всё

25 Jan 12:36:57 INFO [geoserver.wfs] - 
Request: getServiceInfo
25 Jan 12:36:57 INFO [gwc.GWCCleanser] - Deleting GWC cache for rostovWorkspace:roads
25 Jan 12:36:57 INFO [file.FileBlobStore] - /home/eugene/.netbeans/6.9/apache-tomcat-6.0.26_base/temp/geowebcache/rostovWorkspace_roads does not exist or is not writable
25 Jan 12:36:57 INFO [gwc.GWCCleanser] - GWC cache for rostovWorkspace:roads deleted successfully
25 Jan 12:36:57 ERROR [geoserver.wfs] - Transaction failed
org.geoserver.wfs.WFSTransactionException: Error performing insert
        at org.geoserver.wfs.InsertElementHandler.execute(InsertElementHandler.java:204)
        at org.geoserver.wfs.Transaction.execute(Transaction.java:334)
        at org.geoserver.wfs.Transaction.transaction(Transaction.java:109)
        at org.geoserver.wfs.DefaultWebFeatureService.transaction(DefaultWebFeatureService.java:163)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
        at org.geoserver.ows.util.EMFLogger.invoke(EMFLogger.java:51)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
        at $Proxy19.transaction(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.geoserver.ows.Dispatcher.execute(Dispatcher.java:599)
        at org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:230)
        at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
        at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.vfny.geoserver.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265)
        at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
        at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
        at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:124)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
        at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
        at org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:174)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
        at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
        at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149)
        at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:73)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.geoserver.filters.ReverseProxyFilter.doFilter(ReverseProxyFilter.java:183)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:41)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to com.vividsolutions.jts.geom.Geometry
        at org.geotools.jdbc.JDBCDataStore.insertSQL(JDBCDataStore.java:3245)
        at org.geotools.jdbc.JDBCDataStore.insert(JDBCDataStore.java:1249)
        at org.geotools.jdbc.JDBCDataStore.insert(JDBCDataStore.java:1207)
        at org.geotools.jdbc.JDBCInsertFeatureWriter.write(JDBCInsertFeatureWriter.java:73)
        at org.geotools.data.InProcessLockingManager$1.write(InProcessLockingManager.java:335)
        at org.geotools.data.store.ContentFeatureStore.addFeatures(ContentFeatureStore.java:255)
        at org.vfny.geoserver.global.GeoServerFeatureStore.addFeatures(GeoServerFeatureStore.java:81)
        at org.geoserver.wfs.InsertElementHandler.execute(InsertElementHandler.java:173)
        ... 71 more
25 Jan 12:36:57 INFO [geoserver.wfs] - 
Request: transaction
        handle = null
        service = WFS
        version = 1.0.0
        baseUrl = http://localhost:8084/geoserver202/
        providedVersion = null
        lockId = null
        group = [wfs:insert=net.opengis.wfs.impl.InsertElementTypeImpl@1860bed (feature: [SimpleFeatureImpl:roads=[SimpleFeatureImpl.Attribute: name<name id=fid-3587040a_12dbc50b6da_-7feb>=null, SimpleFeatureImpl.Attribute: type<type id=fid-3587040a_12dbc50b6da_-7feb>=null, SimpleFeatureImpl.Attribute: geom<geom id=fid-3587040a_12dbc50b6da_-7feb>=]], handle: null, idgen: <unset>, inputFormat: <unset>, srsName: null)]
        insert = [net.opengis.wfs.impl.InsertElementTypeImpl@1860bed (feature: [SimpleFeatureImpl:roads=[SimpleFeatureImpl.Attribute: name<name id=fid-3587040a_12dbc50b6da_-7feb>=null, SimpleFeatureImpl.Attribute: type<type id=fid-3587040a_12dbc50b6da_-7feb>=null, SimpleFeatureImpl.Attribute: geom<geom id=fid-3587040a_12dbc50b6da_-7feb>=]], handle: null, idgen: <unset>, inputFormat: <unset>, srsName: null)]
        update = []
        delete = []
        native = []
        releaseAction = ALL
Запрос к серверу:

Код: Выделить всё

<wfs:Transaction xmlns:wfs="http://www.opengis.net/wfs" service="WFS" version="1.0.0" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-transaction.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <wfs:Insert>
        <feature:roads xmlns:feature="/rostov">
            <feature:geom>
                <gml:Polygon xmlns:gml="http://www.opengis.net/gml" srsName="EPSG:4326">
                    <gml:outerBoundaryIs>
                        <gml:LinearRing>
                            <gml:coordinates decimal="." cs="," ts=" ">2.30224609375,3.84033203125 2.335205078125,3.323974609375 3.038330078125,3.587646484375 2.30224609375,3.84033203125</gml:coordinates>
                        </gml:LinearRing>
                    </gml:outerBoundaryIs>
                </gml:Polygon>
            </feature:geom>
        </feature:roads>
    </wfs:Insert>
</wfs:Transaction>
Ответ:

Код: Выделить всё

<?xml version="1.0" encoding="UTF-8"?>
<wfs:WFS_TransactionResponse version="1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://localhost:8084/geoserver202/schemas/wfs/1.0.0/WFS-transaction.xsd">
    <wfs:InsertResult>
        <ogc:FeatureId fid="none"/>
    </wfs:InsertResult> 
    <wfs:TransactionResult> 
        <wfs:Status> 
            <wfs:FAILED/> 
        </wfs:Status> 
        <wfs:Message>Error performing insert</wfs:Message> 
    </wfs:TransactionResult>
</wfs:WFS_TransactionResponse>
Подскажите, в чем может быть причина ошибок?
Буду благодарен любой помощи
eugene.krivobokov
Новоприбывший
Сообщения: 4
Зарегистрирован: 25 янв 2011, 11:41
Репутация: 0

Re: OpenLayers и PostGIS. Проблема с wfs-t

Сообщение eugene.krivobokov »

Нашел ошибку в параметре протокола schema.
"http://localhost:8084/geoserver202/wfs? ... tureType[b]&[/b]typeName=rostovWorkspace?roads". Но ничего не изменилось.
Если правильно понял документацию, то этот параметр и не нужен, если указан featureType
eugene.krivobokov
Новоприбывший
Сообщения: 4
Зарегистрирован: 25 янв 2011, 11:41
Репутация: 0

Re: OpenLayers и PostGIS. Проблема с wfs-t

Сообщение eugene.krivobokov »

Похоже, что параметр schema должен быть таким:
"http://localhost:8084/geoserver202/wfs/ ... pace:roads"
Лог geoserver-а:

Код: Выделить всё

25 Jan 14:33:43 INFO [geoserver.wfs] - 
Request: getServiceInfo
25 Jan 14:33:43 INFO [geoserver.wfs] - 
Request: getServiceInfo
25 Jan 14:33:43 INFO [geoserver.wfs] - 
Request: describeFeatureType
        handle = null
        service = WFS
        version = 1.0.0
        baseUrl = http://localhost:8084/geoserver202/
        providedVersion = null
        typeName = [{/rostov}roads]
        outputFormat = XMLSCHEMA
25 Jan 14:33:43 INFO [geoserver.wfs] - 
Request: getFeature
        handle = null
        service = WFS
        version = 1.0.0
        baseUrl = http://localhost:8084/geoserver202/
        providedVersion = null
        query = [net.opengis.wfs.impl.QueryTypeImpl@1effeb7 (group: null, propertyName: null, function: null, filter: [ geom bbox POLYGON ((-3.125 -3.125, -3.125 8.125, 8.125 8.125, 8.125 -3.125, -3.125 -3.125)) ], sortBy: null, featureVersion: null, handle: null, srsName: null, typeName: [{/rostov}roads])]
        maxFeatures = null
        outputFormat = GML2
        resultType = results
        traverseXlinkDepth = null
        traverseXlinkExpiry = null
        formatOptions = {}
eugene.krivobokov
Новоприбывший
Сообщения: 4
Зарегистрирован: 25 янв 2011, 11:41
Репутация: 0

Re: OpenLayers и PostGIS. Проблема с wfs-t

Сообщение eugene.krivobokov »

Заработало!

Код: Выделить всё

var map;
var wfs;

var bounds = new OpenLayers.Bounds(
    1,1,
    4,4
    );

var options = {
    maxExtent: bounds,
    projection: "EPSG:4326"
};

var DeleteFeature = OpenLayers.Class(OpenLayers.Control, {
    initialize: function(layer, options) {
        OpenLayers.Control.prototype.initialize.apply(this, [options]);
        this.layer = layer;
        this.handler = new OpenLayers.Handler.Feature(
            this, layer, {click: this.clickFeature}
        );
    },
    clickFeature: function(feature) {
        // if feature doesn't have a fid, destroy it
        if(feature.fid == undefined) {
            this.layer.destroyFeatures([feature]);
        } else {
            feature.state = OpenLayers.State.DELETE;
            this.layer.events.triggerEvent("afterfeaturemodified",
                                           {feature: feature});
            feature.renderIntent = "select";
            this.layer.drawFeature(feature);
        }
    },
    setMap: function(map) {
        this.handler.setMap(map);
        OpenLayers.Control.prototype.setMap.apply(this, arguments);
    },
    CLASS_NAME: "OpenLayers.Control.DeleteFeature"
});
    
function createMap(){
    map = new OpenLayers.Map("map", options);

    var saveStrategy = new OpenLayers.Strategy.Save({auto:true});

    wfs = new OpenLayers.Layer.Vector("WFS", {
        strategies: [new OpenLayers.Strategy.BBOX(), saveStrategy],
        projection: new OpenLayers.Projection("EPSG:4326"),
        isBaseLayer: true,        
        protocol: new OpenLayers.Protocol.WFS({
            version: "1.0.0",
            url: "http://194.220.0.32:8084/geoserver202/wfs",
            featureNS :  "/rostov",    //
            featureType: "roads",       // 
            srsName: "EPSG:4326",
            geometryName: "geom",
            schema: "http://localhost:8084/geoserver202/wfs/DescribeFeatureType?version=1.0.0&typename=rostovWorkspace:roads"
        })
    });    
    map.addLayers([wfs]);

    var panel = new OpenLayers.Control.Panel(
        {'displayClass': 'customEditingToolbar'}
    );
        
    var navigate = new OpenLayers.Control.Navigation({
        title: "Pan Map"
    });

    var draw = new OpenLayers.Control.DrawFeature(
        wfs, OpenLayers.Handler.Polygon,
        {
            title: "Draw Feature",
            displayClass: "olControlDrawFeaturePolygon",
            multi: true
        }
    );
        var edit = new OpenLayers.Control.ModifyFeature(wfs, {
        title: "Modify Feature",
        displayClass: "olControlModifyFeature"
    });

    var del = new DeleteFeature(wfs, {title: "Delete Feature"});

    var save = new OpenLayers.Control.Button({
        title: "Save Changes",
        trigger: function() {
            if(edit.feature) {
                edit.selectControl.unselectAll();
            }
            saveStrategy.save();
        },
        displayClass: "olControlSaveFeatures"
    });

    panel.addControls([navigate, save, del, edit, draw]);
    panel.defaultControl = navigate;
    map.addControl(panel);
    map.zoomToMaxExtent(bounds);
}
Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей