Buduję skrypt w Pythonie za pomocą OGR / GDAL.
Mam zestaw plików kształtów i zestaw plików rastrowych GeoTiff.
Chciałbym, aby mój skrypt ignorował pliki kształtów, jeśli nie przecinają się one z obszarem rastrowym.
Plik shapefile nie jest prostokątem, więc nie mogę po prostu porównać wartości xmin / xmax, ymin / ymax zwróconych przez layer.GetExtent (). Potrzebuję rzeczywistego wielokąta reprezentującego jego ogólny kształt, a następnie jakiś sposób ustalenia, czy wielokąt przecina się z kwadratem rastrowym.
Myślałem, że mogę jakoś połączyć wszystkie wielokąty w pliku kształtu w jeden element, a następnie odczytać geometrię tego elementu, a następnie porównać te informacje w zakresie rastrowym. Nie jestem jednak pewien, jak to zrobić.
- Jak wyodrębnić informacje o wielokącie granicznym z pliku kształtu?
- Jak ustalić, czy ten wielokąt przecina dany obszar kwadratowy?
Odpowiedzi:
Poniższy skrypt określa obwiednię rastra i tworzy na podstawie obwiedni geometrię.
Następnie określa się geometrię wielokąta wektorowego. To odpowiada na twoje pierwsze pytanie.
Na koniec geometria wektora i rastra jest testowana pod kątem przecięcia (powrotu
True
lubFalse
). To odpowiada na twoje drugie pytanie.źródło
Uważam, że rozwiązanie @ustroetz jest bardzo pomocne, ale musiało zostać poprawione w dwóch miejscach. Po pierwsze, pixelHeight = transform [5] jest już wartością ujemną, więc równanie powinno być
Po drugie, kolejność punktów na ringu musi być przeciwna do ruchu wskazówek zegara. Miałem z tym problemy. Prawidłowa kolejność to:
źródło