Daugiau

Ar tikslus Pythons is_land?


Aš planavau naudoti Pitonusis_landfunkciją, atskirti sausumą ir jūrą. Tačiau po tam tikro patikrinimo man kelia didelį susirūpinimą tikslumas. Negaliu nieko apie tai rasti dokumentacijoje, todėl tikėjausi, kad kas nors čia gali man padėti.

Aš inicijuoju pagrindinę žemėlapį su didele skiriamąja geba ir nedideliu plotu, kad padėčiau atskirti:

map = Basemap (projekcija = 'merc', skiriamoji geba = 'h', area_thresh = 0.001)

Išbandžius šią funkciją, ji grįžta į tiesą, nors taškus pasirenku ne sausumoje:

>>> map.is_land (39.784004,3.345337) True >>> map.is_land (39.789808,3.3395) True >>> map.is_land (39.799041,3.332291) True >>> map.is_land (39.863371,3.346367) True

Trys paskutiniai yra jūroje.

Visi čia naudojęsi šia funkcija ir galbūt gavę patarimų, kaip padaryti ją tikslesnę, ar yra koks nors (pageidautina) „Python“ pakaitalas, ar kitas atvirojo kodo programuojamas sprendimas, siekiant patikrinti, ar daug taškų yra sausumoje ar ne.

Pagalvojau, kad man pirmiausia reikėjo susikurti taškus, ne geriau:

>>> map = Basemap (projection = 'merc', resolution = 'h', area_thresh = 0.001) >>> lat, long = map (39.784004,3.345337) >>> map.is_land (lat, long) True >> > lat, long = map (39.789808,3.3395) >>> map.is_land (lat, long) True >>> lat, long = map (39.799041,3.332291) >>> map.is_land (lat, long) True >> > lat, long = map (39.863371,3.346367) >>> map.is_land (lat, long) True

Priežastis, kodėl ji neveikia, yra dėl argumentųis_land (xin, yin)nurodo tinklelį ir nėra platumos ir išilginės koordinatės, jos tiesiog yra indekso vertės.

Nuois_land (xin, yin)ima indekso reikšmes, o ne latų / ilgų koordinačių, turite sužinoti žemėlapių rodykles, kurios domina jus.

map = pagrindinė žemėlapis. Basemap (ploto_šviežumas = 10, skiriamoji geba = "l", llcrnrlon = 0, llcrnrlat = -80., urcrnrlon = 360, urcrnrlat = 80) lat, long = -37, 158 x, y = map (long , lat) >>> map.is_land (x, y) Klaidinga

Tielatirilgaskoordinatės yra prie Australijos krantų, todėl tai veikia.xirynereikia būti sveikaisiais skaičiais, jie gali būti plūduriuojantys.

REDAGUOTI:

Atkreipkite dėmesį, kad argumentaižemėlapisyražemėlapis (ilgas, lat.).


Dokumentuose sakoma: „Skambinant„ Basemap “klasės egzemplioriui argumentais„ lon “,„ lat “, lon / lat (laipsniais) bus konvertuojamos į x / y žemėlapio projekcijos koordinates (metrais)“.

Taigi jūs einate taškais apie 39,789808E, 3,33395N - tai tikrai sausumoje (Kenijoje). Jei tikėjotės taškų netoli Ispanijos pakrantės, ką tik pakeitėte koordinates. Dar kartą perskaitykite dokumentaciją - „lon, lat“.

Jūs naudojatėslatirilgaskaip kintamieji vardai, bet jūs tikrai gaunate X ir Y (kurie būtų arčiau ilgumos ir platumos, o ne platumos ir ilgumos).

Tai yra labai dažna problema erdvinėse programose. Dažniausiai tai padeda prisiminti jo daugiausia Dekarto sąvokas, taigi X tada Y.


Parašiau nedidelį paketą su funkcija, kuri yra daug greitesnė nei basemap.is_land () https://github.com/toddkarin/global-land-mask

Tai suteikia visuotinę dvejetainę sausumos / vandenyno kaukę 1 km raiška.


Žiūrėti video įrašą: מצאנו נחש פיתון (Spalio Mėn 2021).