Як читати файл форми у Python?


23

Моє запитання - це розширення вертикальних ліній у форматі полігона . Будь ласка, спочатку зверніться до цього питання.

Що ви побачите, це метод генерації вертикальних ліній відносно обмежувального поля в інтервалі, визначеному користувачем. Я розумію, що OGR, Fiona, Shapely тощо можна використовувати для наступного кроку відсікання, але я не розумію їх використання.

Як я прочитаю один рядок форми форми багатокутника? Кожна програма, яка використовує Shapely, показує, як генерувати LineString, Point або Polygon, але ніколи не читати наявний файл форми

Будь ласка, допоможіть мені хоча б скелетною структурою, щоб я міг будувати її.

Відповіді:


40

1) читайте свій файл форми з Fiona , PyShp , ogr або ..., використовуючи протокол geo_interface (GeoJSON):

з Фіоною

import fiona
shape = fiona.open("my_shapefile.shp")
print shape.schema
{'geometry': 'LineString', 'properties': OrderedDict([(u'FID', 'float:11')])}
#first feature of the shapefile
first = shape.next()
print first # (GeoJSON format)
{'geometry': {'type': 'LineString', 'coordinates': [(0.0, 0.0), (25.0, 10.0), (50.0, 50.0)]}, 'type': 'Feature', 'id': '0', 'properties': OrderedDict([(u'FID', 0.0)])}

з PyShp

import shapefile
shape = shapefile.Reader("my_shapefile.shp")
#first feature of the shapefile
feature = shape.shapeRecords()[0]
first = feature.shape.__geo_interface__  
print first # (GeoJSON format)
{'type': 'LineString', 'coordinates': ((0.0, 0.0), (25.0, 10.0), (50.0, 50.0))}

з ogr:

from osgeo import ogr
file = ogr.Open("my_shapefile.shp")
shape = file.GetLayer(0)
#first feature of the shapefile
feature = shape.GetFeature(0)
first = feature.ExportToJson()
print first # (GeoJSON format)
{"geometry": {"type": "LineString", "coordinates": [[0.0, 0.0], [25.0, 10.0], [50.0, 50.0]]}, "type": "Feature", "properties": {"FID": 0.0}, "id": 0}

2) перетворення в Shapely геометрію (за допомогою функції форми )

# now use the shape function of Shapely
from shapely.geometry import shape
shp_geom = shape(first['geometry']) # or shp_geom = shape(first) with PyShp)
print shp_geom
LINESTRING (0 0, 25 10, 50 50)
print type(shp_geom)
<class 'shapely.geometry.linestring.LineString'>

3) обчислення

4) збережіть отриманий файл форми


5
Я додав би геопанд до списку:geopandas.read_file("my_shapefile.shp")
joris

Станом на GDAL 2.0 замість цього osgeo.ogr.Openвикористовуйте osgeo.gdal.OpenEx( деталі ).
Кевін

1
з ogr, я спершу повинен був визначити json як json, щоб мати можливість його далі обробити витончено: 'first = json.loads (first)'
Лев,

11

Я вважаю геопанди найкращим виконавцем тут. Код:

import geopandas as gpd
shapefile = gpd.read_file("shapefile.shp")
print(shapefile)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.