Tworzenie prostego obrazu z danych wektorowych

14

Czy ktoś może zasugerować szybki (i najlepiej otwarty) sposób na utworzenie obrazu z pliku kształtu. Na przykład mam plik kształtu zawierający granice działki, chcę utworzyć plik png przedstawiający te działki. Symbolika wymagana dla tego obrazu będzie bez kości (jednolity kontur i wypełnienie).

Wiem, że shp2img z MapServer zrobiłby to. Jestem tylko ciekawy, czy jest coś jeszcze.

Wszelkie odniesienia do wstępnie skompilowanych narzędzi lub api / sdks są mile widziane.

użytkownik890
źródło
Być może to pytanie można by nazwać „Tworzenie prostego obrazu z danych wektorowych (np. Kształt)”, aby było to bardziej ogólne pytanie? Nadal otrzymujesz swoją odpowiedź, ale jest też większa zachęta dla innych ludzi, aby zobaczyć / odpowiedzieć. Z tego samego powodu sugerowałbym również zamianę „i open source” na „najlepiej open source”.
Mark Ireland
Dobre punkty, zastosowane zmiany.
user890

Odpowiedzi:

15

Możesz użyć Pythona (moduły: shapley , GDAL / OGR , numpy , matplotlib ) i GDAL / OGR, aby narysować obraz z prawie dowolnego źródła danych wektorowych, w twoim przypadku pliku kształtu . Może to ci pomoże.

Przykład:

from shapely.geometry import Polygon
from shapely.wkb import loads
from osgeo import ogr
from matplotlib import pyplot

def drawPoligon(poligon,graf):
    xLista,yLista = poligon.exterior.xy
    graf.fill(xLista,yLista,"y")
    graf.plot(xLista,yLista, "k-")

fig = pyplot.figure(figsize=(4, 4),dpi=180)
ax = fig.add_subplot(111)
file1 = ogr.Open("d:\\temp02\\datafile.shp")

layer = file1.GetLayerByName("datafile")
parcel = layer.GetNextFeature()

while parcel is not None:
    geometryParcel = loads(parcel.GetGeometryRef().ExportToWkb())
    drawPoligon(geometryParcel , ax)
    parcel = layer.GetNextFeature()


pyplot.savefig('datafile.png')
Mario Miler
źródło
Dokładnie to, czego potrzebowałem. To podejście jest szczególnie przydatne, ponieważ nie jest powiązane ze źródłami danych pliku kształtu. Dzięki.
user890
6

Szybki, tani (i brudny):

  • otwarte i symbolizować plik kształt z QGIS , udig , openjump lub innego wolnego GIS,
  • naciśnij przycisk „ wydrukuj ekran ”,
  • wklej w gimp i zapisz jako plik png.

Wada: oczywiście rozdzielczość obrazu nie może być lepsza niż rozdzielczość ekranu.

Julien
źródło
3

GeoTools http://geotools.org zawiera wszystkie bity potrzebne do zrobienia tego, zdziwiłbym się, gdyby ktoś jeszcze nie miał kodu, aby to zrobić.

Ian Turton
źródło
2

Myślę, że to zależy od tego, co masz na myśli przez szybkie. Czy masz na myśli coś łatwego w instalacji lub coś, co jest łatwe w użyciu po zainstalowaniu?

Wspominasz o MapServer i shp2img. Jeśli masz zainstalowany MapServer, prawdopodobnie mógłbyś napisać całkiem prosty skrypt MapScript (Python lub php), który przechodziłby przez folder plików kształtów i renderowałby ich obrazy z domyślną symboliką.

DavidF
źródło