Daha çox

Python istifadə edərək müəyyən bir nöqtədə shapefile çoxbucaqlı atribut dəyərini əldə edin (məsələn PyShp vasitəsilə)


Bir çox poliqondan ibarət bir shapefile sahibəm. Bu çoxbucaqlıların xüsusiyyətləri var. Pythonda bir koordinat nöqtəsi götürən, hansı çoxbucaqlıya düşdüyünü təyin edən və bu çoxbucaqlı atributları qaytaran bir skript yazmağa çalışıram.

İndiyə qədər PyShp-dən istifadə edərək bütün qeydləri çap edən bir şey əldə etdim.

idxal shapefile sf = shapefile.Reader ("England.shp") qeydlər = sf.records () çap qeydləri

Beləliklə, 'London' -un 'Area' dəyərinə malik bir çoxbucağın içərisindəki Buckingham Sarayı üçün bir koordinat keçmək və 'London' olaraq geri qaytarmaq istəyirəm.

Kimsə məni düzgün istiqamətə yönəldə bilərmi?


Ən sadə səviyyədə, forma şəklindəki hər çoxbucaqlının arasından keçməli və işarələrin içəridə olub olmadığını yoxlamalısan. Doğru çoxbucağı tapdıqda döngəni dayandıra bilərsiniz. Nöqtənin çoxbucaqlının daxilində olub olmadığını yoxlayaraq bu prosesi bir az da sürətləndirə bilərsiniz. Əvvəlcə dərəcəni yoxlamaqla, düzbucaqlının 4 nöqtəsini tez bir zamanda yoxlayaraq imkanları tez bir zamanda daraldırsınız.

Aşağıdakı funksiya nöqtənin çoxbucağın içərisində olub olmadığını yoxlayır. Yalnız bu funksiya sualınıza cavab verəcəkdir. Pyshp shapeRecords () metodundan istifadə edirsinizsə, həndəsə və əlaqəli qeydləri saxlayacaq, beləliklə düzgün çoxbucağı tapdığınız zaman atributlara asanlıqla giriş əldə edəcəksiniz:

def point_in_poly (x, y, poly): # nöqtənin bir vertex olub olmadığını yoxlayın (x, y) poli içində: "IN" qaytar # nöqtənin i aralığında (len (poly)) sərhəddə olub olmadığını yoxlayın: p1 = Yox p2 = Yoxsa i == 0: p1 = poly [0] p2 = poly [1] başqa: p1 = poly [i-1] p2 = poly [i] if p1 [1] == p2 [1] və p1 [1] == y və x> min (p1 [0], p2 [0]) və x  min (p1y, p2y): y <= max (p1y, p2y) : x <= max (p1x, p2x): əgər p1y! = p2y: xints = (y-p1y) * (p2x-p1x) / (p2y-p1y) + p1x əgər p1x == p2x və ya x <= xints: içəridə = p1x içəridə deyil, içəridə p1y = p2x, p2y: "IN" qayıt başqa "qayıt" OUT "# Daxil olmaq üçün bir təpəni sınayın poligono = [(-33.416032, -70.593016), (-33.415370, -70.589604), ( -33.417340, -70.589046), (-33.417949, -70.592351), (-33.416032, -70.593016)] lat = -33.416032 lon = -70.593016 print point_in_poly (lat, lon, poligono) # daxiletmə üçün sərhəd nöqtəsini sınayın poly2 = (1,1), (5,1), (5,5), (1,5), (1,1)] x = 3 y = 1 çap nöqtəsi_ in_poly (x, y, poly2)


Videoya baxın: PySHP - Reader Shapefile Python (Oktyabr 2021).