Австралийская избирательная комиссия имеет свободные ESRI и MapInfo формирующие ГИС-слои австралийских границ выборов для download. Я хочу преобразовать эти данные в изображение многоугольника эскиза, используя бесплатный инструмент.Как преобразовать данные ESRI или MapInfo GIS в изображения с помощью бесплатных инструментов?
ответ
Предполагаю, что вам нужен отдельный образ для каждого электората? Если да, то я бы следующий подход с использованием питона:
Прочитайте геометрию с помощью GDAL/OGR:
Установите GDAL/OGR tools и их python bindings. Загрузите шейп-файл ESRI для границ выборов. Убедитесь, что вы можете прочитать геометрию полигона, используя OGR:
import sys
import ogr
ds = ogr.Open("/path/to/boundary/file.shp")
if ds is None:
print "Open failed.\n"
sys.exit(1)
lyr = ds.GetLayer(0)
lyr.ResetReading()
feat = lyr.GetNextFeature()
while feat is not None:
geom = feat.GetGeometryRef()
if geom is None or geom.GetGeometryType() != ogr.wkbPolygon:
print "no poly geometry\n"
feat = lyr.GetNextFeature()
ds.Destroy()
Выход геометрии с использованием Matplotlib через стройные, Декарт
Установка matplotlib, shapely и descartes. Измените указанный выше сценарий для загрузки каждого полигона в matplob через стройные и Декарта:
import sys
import ogr
from shapely.wkb import loads
from descartes import PolygonPatch
from matplotlib import pyplot
ds = ogr.Open("/path/to/boundary/file.shp")
if ds is None:
print "Open failed.\n"
sys.exit(1)
lyr = ds.GetLayer(0)
lyr.ResetReading()
feat = lyr.GetNextFeature()
while feat is not None:
geom = feat.GetGeometryRef()
if geom is None or geom.GetGeometryType() != ogr.wkbPolygon:
print "no poly geometry\n"
else:
# create matplotlib figure:
fig = pyplot.figure(1, figsize = [10,10], dpi = 300) #create 10x10 figure
ax = fig.addsubplot(111) #Add the map frame (single plot)
# add polygon:
patch = PolygonPatch(loads(feature.GetGeometryRef().ExportToWkb()), plus colour and line considerations)
ax.addpatch(patch) # simply add the patch to the subplot
# set plot vars
ax.set_xlim(get xmin and xmax values from data)
ax.set_ylim(get ymin and ymax values from data)
ax.set_aspect(1)
# save as image
pyplot.savefig('somefile.png', some arguments you like)¶
feat = lyr.GetNextFeature()
ds.Destroy()
Очевидно, что вам нужно, чтобы исправить это немного, чтобы заставить это сделать, как вы хотите, но общий подход должен быть звук.
Отъезд FWTools.
Существует также helpful mailing list, если вам нужна помощь по конверсиям.
Загрузить и использовать QGIS - www.qgis.org Этот удобный инструмент с открытым исходным кодом работает хорошо и открывает множество типичных форматов изначально (то есть файлы формы, первоначально разработанные ESRI). Он также имеет встроенный инструмент OGR.
Плюс это просто забавно играть и просты в использовании.