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.


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')

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.



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ą.



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.