3

I found an ArcGIS REST MapServer showing data I care about:

https://kart.ra.no/arcgis/rest/services/Distribusjon/Kulturminner20180301/MapServer


QGIS

I can visualize it in QGIS: Layer -> Add Layer -> ArcGIS REST Server, then create a connection with the above URL. When I connect, I am presented with multiple options:

enter image description here

I choose Enkeltminner, as that's what I care about now. I can then export data to GeoJSON:

enter image description here


ogr2ogr

I would like to achieve this using ogr2ogr. Using this answer, I tried:

ogr2ogr -f GeoJSON test.json "https://kart.ra.no/arcgis/rest/services/Distribusjon/Kulturminner20180301/MapServer/" OGRGeoJSON 

Resulting in:

ERROR 4: Failed to read TopoJSON data
FAILURE:
Unable to open datasource `https://kart.ra.no/arcgis/rest/services/Distribusjon/Kulturminner20180301/MapServer/' with the following drivers.
  -> `FITS'
  -> `PCIDSK'
  -> `netCDF'
  -> `PDS4'
  -> `VICAR'
 ...

This website also provides an example of how to perform a similar task:

ogr2ogr -f GeoJSON CadastreAddress_Example1.json "https://services.slip.wa.gov.au/public/rest/services/SLIP_Public_Services/Property_and_Planning_WFS/MapServer/50/query?where=locality_name+%3D+%27PERTH%27&outfields=*&f=json" OGRGeoJSON -s_srs EPSG:3857 -t_srs EPSG:4326

Both the answer I followed, and this above example uses a query string after the core URL. I think if I did figure out the correct URL, I could export the Enkeltminner layer to GeoJSON.

I can click Enkeltminneikoner on the ArcGIS page I am using, to get to this URL (notice the /6 in the end):

https://kart.ra.no/arcgis/rest/services/Distribusjon/Kulturminner20180301/MapServer/6

Try again with this URL:

ogr2ogr -f GeoJSON test.json "https://kart.ra.no/arcgis/rest/services/Distribusjon/Kulturminner20180301/MapServer/6" OGRGeoJSON 

Output again:

ERROR 4: Failed to read TopoJSON data
FAILURE:
Unable to open datasource `https://kart.ra.no/arcgis/rest/services/Distribusjon/Kulturminner20180301/MapServer/6' with the following drivers.
  -> `FITS'
  -> `PCIDSK'
  -> `netCDF'
  -> `PDS4'
  -> `VICAR'
...

As suggested in the comments, I also tried:

ogr2ogr -f GeoJSON test.json "https://kart.ra.no/arcgis/rest/services/Distribusjon/Kulturminner20180301/MapServer/6/query?where1=1&outFields=*&f=json" OGRGeoJSON

This attempt seems like a closer attempt to the examples. Output however is:

ERROR 1: Invalid FeatureCollection object. Missing 'fields' member.
ERROR 1: Layer schema generation failed.
ERROR 4: Failed to read ESRIJSON data
FAILURE:
Unable to open datasource `https://kart.ra.no/arcgis/rest/services/Distribusjon/Kulturminner20180301/MapServer/6/query?where1=1&outFields=*&f=json' with the following drivers.
  -> `FITS'
  -> `PCIDSK'
  -> `netCDF'
  -> `PDS4'
  -> `VICAR'
  ...

It complains about fields member. I try replacing the outFields to fields then:

ogr2ogr -f GeoJSON test.json "https://kart.ra.no/arcgis/rest/services/Distribusjon/Kulturminner20180301/MapServer/6/query?where1=1&fields=*&f=json" OGRGeoJSON

The same error is returned.


ogrinfo

It was also suggested in the comments to use this command:

ogrinfo -so "https://kart.ra.no/arcgis/rest/services/Distribusjon/Kulturminner20180301/MapServer/6/query?where=1=1&outFields=*&outSR=4326&f=geojson" OGRGeoJSON

This outputs:

INFO: Open of `https://kart.ra.no/arcgis/rest/services/Distribusjon/Kulturminner20180301/MapServer/6/query?where=1=1&outFields=*&outSR=4326&f=geojson'
      using driver `GeoJSON' successful.

Layer name: OGRGeoJSON Geometry: Polygon Feature Count: 381014 Extent: (-8.940364, 56.715905) - (33.502886, 80.821061) Layer SRS WKT: GEOGCRS["WGS 84", DATUM["World Geodetic System 1984", ELLIPSOID["WGS 84",6378137,298.257223563, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4326]] Data axis to CRS axis mapping: 2,1 kulturminneDatering: String (0.0) kulturminneDateringKvalitet: String (0.0) kulturminneDateringMetode: String (0.0) kulturminneEnkeltminneArt: String (0.0) kulturminneHovedMateriale: String (0.0) kulturminneKategori: String (0.0) kulturminneNavaerendeFunksjon: String (0.0) kulturminneOpprinneligFunksjon: String (0.0) kulturminneSynlig: Integer (0.0) matrikkelnummer: String (0.0) navn: String (0.0) tilleggsvernedato: String (0.0) tilleggsvernetype: String (0.0) vernedato: String (0.0) vernelov: String (0.0) verneparagraf: String (0.0) vernetype: String (0.0) datafangstdato: String (0.0) forsteDigitaliseringsdato: String (0.0) lokalId: String (0.0) navnerom: String (0.0) versjonId: String (0.0) informasjon: String (0.0) kommune: String (0.0) malemetode: String (0.0) noyaktighet: Integer (0.0) linkAskeladden: String (0.0) linkKulturminnesok: String (0.0) oppdateringsdato: String (0.0) opphav: String (0.0) OBJECTID: Integer (0.0) SHAPE.STArea(): Real (0.0) SHAPE.STLength(): Real (0.0)

which is nice, but I was aiming for a GeoJSON with the data.


What URL should I use so that I can export the Enkeltminner layer using ogr2ogr, or other command line methods?

zabop
  • 2,050
  • 7
  • 35
  • You're trying to export the service and not a layer. Even if a MapServer service has only one layer, you would need to include the index value in the URL to that specific layer. I am unable to load the URL to get you that number, but note how your example includes the /50 in the path. That is the layer index. Add that to your URL and try again. – evv_gis Sep 09 '22 at 13:36
  • Thank you! I edited my question to include an attempt like this. – zabop Sep 09 '22 at 13:52
  • You probably need to convert the output to JSON and you need features, which would be included in a query, hence why the examples use them. Try using the following command: ogr2ogr -f GeoJSON test.json "https://kart.ra.no/arcgis/rest/services/Distribusjon/Kulturminner20180301/MapServer/6/query?where1=1&outFields=*&f=json" OGRGeoJSON – evv_gis Sep 09 '22 at 14:05
  • ogrinfo -so "https://kart.ra.no/arcgis/rest/services/Distribusjon/Kulturminner20180301/MapServer/6/query?where=1=1&outFields=*&outSR=4326&f=geojson" OGRGeoJSON works for me – nmtoken Sep 09 '22 at 14:29
  • @evv_gis, thanks, questions is updated with your suggestions. – zabop Sep 09 '22 at 14:38
  • @nmtoken, that command run for me without errors, but it did not produce a GeoJSON. Did it do that for you? – zabop Sep 09 '22 at 14:39
  • 1
    It provides a summary of the data -so I assume you would want: ogr2ogr -f GeoJSON test.json "https://kart.ra.no/arcgis/rest/services/Distribusjon/Kulturminner20180301/MapServer/6/query?where=1=1&outFields=*&outSR=4326&f=geojson" OGRGeoJSON – nmtoken Sep 09 '22 at 14:42
  • This seems to work. Would you like to add it as an answer? – zabop Sep 09 '22 at 14:43

1 Answers1

5
ogr2ogr -f GeoJSON test.json "https://kart.ra.no/arcgis/rest/services/Distribusjon/Kulturminner20180301/MapServer/6/query?where=1=1&outFields=*&outSR=4326&f=geojson" OGRGeoJSON
nmtoken
  • 13,355
  • 5
  • 38
  • 87