5

I am trying to split a SHP file using all the attributes in the column header SUBURB. Below is an example of the attribute table sitting behind the SHP file:

Name Suburb ABC BAY BCV BAY ABS ISLE CSD DUNE QWE ISLE DSA BAY AG DUNE UY WELL UYA ISLE 

I want to be able to specify in the ogr2ogr script that it should split the SHP file based on 'BAY', 'ISLE', 'DUNE'..... without having to specify each one of them manually.

I have tested the -where tag but unable to get it to split on all the items contained in the header SUBURB. I am new to ogr2ogr so still learning.

Also if this is possible how do I ensure the output SHP files contain the respective SUBURB name?

I am using a windows 8 machine.

The code that I'm using is

ogr2ogr -f "ESRI Shapefile" -where "SUBURB = 'WELL'" D:\Mapdata\Spatial_Data\SHP_Files\Output D:\Mapdata\Spatial_Data\SHP_Files\Input.shp 

This code creates the shapefile with features where the SUBURB is 'WELL'. I don't know how to modify this script to get it to create separate shapefiles with respective names for all the SUBURBS.

3
  • What operating system are you trying this on? It's a trivial script but knowing what system you're trying it on would help you get a targeted answer. Commented Jan 13, 2016 at 3:51
  • @SaultDon- Windows 8 machine. The code I'm using is 'ogr2ogr -f "ESRI Shapefile" -where "SUBURB = 'WELL'" D:\Mapdata\Spatial_Data\SHP_Files\Output D:\Mapdata\Spatial_Data\SHP_Files\Input.shp' Commented Jan 13, 2016 at 3:56
  • 3
    Please edit the question in response to requests for clarification. Those who would help you should not need to scan comments for critical details. Commented Jan 13, 2016 at 5:04

1 Answer 1

7

First generate a list of SUBURB (I use SOVEREIGNT because playing with Natural Earth Data) using OGR SQL function and output to CSV

ogr2ogr -f CSV ne_10m_admin_0_countries.csv ne_10m_admin_0_countries.shp -sql "SELECT DISTINCT SOVEREIGNT FROM ne_10m_admin_0_countries" 

Avoid the first line (header with skip=1) and loop on the list of suburbs (SOVEREIGNT in my case)

for /f "skip=1 usebackq tokens=1 delims=," %%a in ("ne_10m_admin_0_countries.csv") do ( ogr2ogr -f "ESRI Shapefile" -where "SOVEREIGNT = '%%a'" "out/ne_10m_admin_0_countries_%%a.shp" ne_10m_admin_0_countries.shp ) 

For second part, tested on a Linux box through Wine so syntax error may arise.

3
  • Thank you for your help. Just tested the first bit on creating the list of suburbs. Why does it give me an error message: "Warning 4: Failed to open \.csv, permission denied"? The reason why I ask this is because it creates the csv file okay yet gives me the error message. I will test the second part tomorrow. Thank you once again! Commented Jan 13, 2016 at 6:10
  • Hi @Thomas, I am unable to get the second part of the code to work on a windows machine. Can you point me in the right direction with respect to setting up the input/output file path in ogr2ogr on a windows machine? Commented Jan 14, 2016 at 4:54
  • 1
    It worked okay in the end. I figured out where the syntax issues were occurring. Thank you once again. The exact syntax: for /f "skip=1 usebackq tokens=1 delims=," %%a in ("Suburbs.csv") do ogr2ogr -f "ESRI Shapefile" -where "SUBURB = '%%a'" "Parks_%%a.shp" Parks.shp Commented Jan 14, 2016 at 5:32

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.