5 votos

¿Por qué es el curl de sintaxis no se puede crear el almacén de datos?

Estoy implementando el código siguiente para cargar una ya existente shapefile como por la documentación,

curl -u admi PUT 'Content-type: application/zip' \
      --data-binary @/var/www/geo/shapefile/zip/Poa_horridula.zip \
      http://localhost:8080/geoserver/rest/workspaces/acme/datastores/Poa_horridula/Poa_horridula.zip

Pero estoy consiguiendo el siguiente error,

curl: (6) no Podía resolver host 'Content-type'

No hay tal almacén de datos: acme,Poa_horridula

El documento dice que el curl código de crear el almacén de datos, a continuación, ¿por qué estoy recibiendo este error?

ACTUALIZACIÓN: he cambiado el código para cargar un archivo zip, pero todavía no estoy capaz de cargar cualquier archivo de forma.

A donde voy mal?

ACTUALIZACIÓN 2: Ok estoy casi allí

Así que he cambiado el comando

curl -u admin:geoserver -v -XPUT -H 'Content-type: application/zip' --data-binary @/var/www/geo/shapefile/zip/Poa_horridula.zip http://localhost:8080/geoserver/rest/workspaces/acme/datastores/Poa/file.shp

El único problema es que soy capaz de agregar el archivo de forma, pero la capa no está publicada. Es eso normal? ¿Tengo que publicar de forma manual?

14voto

jevakallio Puntos 15003

Esta es la solución final. Así que yo estaba usando shapefile.py para crear el archivo de forma de archivos CSV y el problema es que shapefile.py no crear una .prj archivo y que fue la razón por la que el archivo de forma no fue la publicación. Aquí está el código para la creación de la .prj archivo para EPSG:4326 (sólo necesita definir la proyección epsg en el siguiente código, que necesita y se va a crear el deseado .prj archivo para usted),

prj = open("/path/shapefile/%s.prj" % filename, "w")
    epsg = 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]]'
    prj.write(epsg)
    prj.close()

Y, a continuación, puede ejecutar el siguiente cURL de comandos para publicar los archivos de forma según sea necesario.

Para Cargar una ya Existente Shapefile, el uso de este código,

curl -u admin:geoserver -v -XPUT -H 'Content-type: text/plain' -d 'file:/var/www/geo/shapefile/csvQshp/Quercus_iltisii.shp' http://localhost:8080/geoserver/rest/workspaces/acme/datastores/Quercus_iltisii/external.shp?

Dar la ruta completa de su file y no te olvides ? después de que el externo.shp.

Para Subir un Zip Shapefile, el uso de este código,

curl -u admin:geoserver -v -XPUT -H 'Content-type: application/zip' --data-binary @/var/www/geo/shapefile/zip/Poa_horridula.zip http://localhost:8080/geoserver/rest/workspaces/acme/datastores/Poa/file.shp

No te olvides @ antes de que la ruta de acceso de archivo para los archivos comprimidos.

Para la Carga completa de Directorios de Archivos, el uso de este código,

curl -u admin:geoserver -v -XPUT -H 'Content-type: text/plain' -d 'file:/var/www/geo/shapefile/csvQshp/' "http://localhost:8080/geoserver/rest/workspaces/acme/datastores/csvQshp/external.shp?configure=all"

3voto

shsteimer Puntos 8749

Creo que la URL del archivo es el culpable.

'file:./shapefile/csv_shp/Stemmodontia_reticulata.shp'

No estoy seguro de Geoserver admite que la URL. Donde está el archivo?


No hay tal almacén de datos: opengeo,Stemmodontia_reticulata

Compruebe si el opengeo área de trabajo existe en el servidor. Este error puede ser debido a eso.

Si usted está interesado en la creación de un almacén de datos de un directorio existente shapefiles, usted puede tratar de algo como la siguiente

curl -u admin:geoserver -XPUT -H 'Content-type: text/plain' \
   -d 'file:///data/shapefiles/' \
   "http://localhost:8080/geoserver/rest/workspaces/acme/datastores/shapefiles/external.shp?configure=all" 

De esa manera usted no tiene que añadir los archivos uno por uno.

Usted tendrá que agregar el área de trabajo de primera.

curl -u admin:geoserver -v -XPOST -H 'Content-Type: application/xml' \
     -d '<coverageStore><name>int_dec</name><workspace>Stemmodontia_reticulata</workspace>  
         <enabled>true</enabled></coverageStore>' \
         http://localhost:8080/geoserver/rest/workspaces/Stemmodontia_reticulata/coveragestores

A continuación, agregue el existente shapefile

curl -u admin:geoserver -XPUT -H 'Content-type: application/zip' \
   --data-binary @Stemmodontia_reticulata.zip \
   http://localhost:8080/geoserver/rest/workspaces/opengeo/datastores/Stemmodontia_reticulata/file.shp

Espero que funcione.

1voto

FlySwat Puntos 61945

Ya que usted ya tiene la carga de la sección, permítanme añadir a eso.

Cuando la depuración de rizo, yo suelo usar algo que se hace eco de las cosas, ya que para la vida de mí no puedo recordar el cURL de sintaxis correctamente. httpbin me ayuda mucho

Por ejemplo, para depurar la carga de un archivo de forma que se hace por:

 curl -u admin:geoserver -v -XPUT -H 'Content-type: text/plain' -d 'file:/var/www/geo/shapefile/csvQshp/Quercus_iltisii.shp' http://localhost:8080/geoserver/rest/workspaces/acme/datastores/Quercus_iltisii/external.shp?

Me gustaría modificar enviarlo a httpbin como este:

 (test)rburhum@peru.local ~ $ curl -u admin:geoserver -v -XPUT -H 'Content-type: text/plain' -d 'file:/var/www/geo/shapefile/csvQshp/Quercus_iltisii.shp' http://httpbin.com/put/geoserver/rest/workspaces/acme/datastores/Quercus_iltisii/external.shp
* About to connect() to httpbin.com port 80 (#0)
*   Trying 67.215.65.132...
* connected
* Connected to httpbin.com (67.215.65.132) port 80 (#0)
* Server auth using Basic with user 'admin'
> PUT /put/geoserver/rest/workspaces/acme/datastores/Quercus_iltisii/external.shp HTTP/1.1
> Authorization: Basic YWRtaW46Z2Vvc2VydmVy
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5
> Host: httpbin.com
> Accept: */*
> Content-type: text/plain
> Content-Length: 55
> 
* upload completely sent off: 55 out of 55 bytes
* HTTP 1.0, assume close after body
< HTTP/1.0 303 See Other
< Location: http://httpbin.com/put/geoserver/rest/workspaces/acme/datastores/Quercus_iltisii/external.shp
< Content-Length: 0
< Connection: close
< Date: Wed, 14 Nov 2012 20:11:56 GMT
< Server: OpenDNS Guide
< 
* Closing connection #0

Esto me dice que la Autorización Básica que pasó y que una carga que sucedió con un verbo a la Ubicación que allí se especifica. Útil

Ahora, para responder a su publicación pregunta, yo suelo usar esta curl de python método:

def publish_layer(store_name, table_name, style_name):
    payload =  "<featureType><name>{0}</name></featureType>".format(table_name)

    c = pycurl.Curl()
    c.setopt(c.URL, '{0}/rest/workspaces/{1}/datastores/{2}/featuretypes'.format(GEOSERVER_URL, GEOSERVER_WORKSPACE, store_name))

    c.setopt(pycurl.USERPWD, GEOSERVER_USER + ':' + GEOSERVER_PASSWORD)
    c.setopt(pycurl.POST, 1)
    c.setopt(pycurl.HTTPHEADER, ["Content-type: text/xml"])
    c.setopt(pycurl.POSTFIELDSIZE, len(payload))
    c.setopt(pycurl.READFUNCTION, StringReader(payload).read_cb)
    b = StringIO.StringIO()
    c.setopt(pycurl.WRITEFUNCTION, b.write)

    c.perform()

    check_http_code(c, (table_name, style_name),b)

    return

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X