Daha çox

Unary_union zamanı formalı (geos) çökür

Unary_union zamanı formalı (geos) çökür


Python 2.7.9 -da GEOS 3.4.2 -dən istifadə edərək birdən çox çoxbucaqlıları Shapely 1.5.6 ilə birləşdirməyə çalışarkən, əsas C ++ kodunda aşağıdakı xətanı alıram:

İddia uğursuz oldu: (!

Çoxbucaqlar Python siyahısındadır və sonra zəng vururamşekilli.ops.unary_union (polygon_list). Çoxbucaqlı siyahıda hamısı uyğun çoxbucaqlı olan 1998 maddə var. İşlətməyə çalışdımunary_unionƏl ilə yaradılan çoxbucaqlılar ilə ayrı bir python sessiyasında əməliyyat və işləyir.

Çoxbucaqlıların sayı problem ola bilər və ya sənəddəki idxal sifarişi (Basemap -dan əvvəl düzgün şəkildə idxal edilməsinə ehtiyac olduğunu qeyd etdim, amma bu paketi istifadə etmirəm)?


İdxal bəyannamələrinin yenidən qurulmasını sınadıqdan sonra bunu özüm başa düşdüm. Mənim vəziyyətimdərasterioidxal etmək lazım idi sonra formalı

Misal üçün:

düzgün idxal rasterio

Düzgün PyPI səhifəsində olan təkər vasitəsilə mac -da quraşdırılmış Shapely 1.5.7 ilə də bu problemlə qarşılaşdım. Mənim üçün həll yolu belə idi:

pip quraşdırın-təkmilləşdirin-təkərdən istifadə etməyin

Yenidən tərtib etdikdən sonra Shapely gözlənildiyi kimi çalışdı.

Vasitəsi ilə quraşdırılmış coğrafi məkan asılılıqları (GEOS daxil olmaqla) ilə bir mac (OS 10.10.2) içindəyəm homebrew.


Geopandas / Shapely -də bənzərsiz çoxbucaqlı qrupları müəyyənləşdirin

Tutaq ki, mənim çoxsaylı iki qrupum / "adalarım" var (iki bitişik olmayan əyalətdə siyahıyaalma yollarını düşünün). Məlumatlarım belə görünə bilər:

İstəyirəm ki, hər bir adadakı çoxbucaqlılar öz qrupunu təmsil edən şəxsiyyət vəsiqəsi götürsünlər. Məsələn, sol altdakı 3 çoxbucaqlı IslandID = 1, sağdakı 3 çoxbucaqlı isə IslandID = 2 ola bilər.

Bunu etmək üçün bir yol hazırladım, amma bunun ən yaxşı / ən təsirli yol olduğunu düşünürəm. Mən aşağıdakıları edirəm:

1) Çoxbucaqlı birliyin daxilində çoxbucaqlılara bərabər bir həndəsə ilə bir GeoDataFrame yaradın. Bu mənə hər bir "ada" üçün bir olmaqla iki çoxbucaq verir.

2) Hər qrup üçün şəxsiyyət vəsiqəsi yaradın.

3) Fəza adaları orijinal çoxbucaqlılara birləşdirir, buna görə də hər bir çoxbucağın uyğun ada id -si var.


Polylines dəstində Geopandas Dissolve ilə ArcGIS Dissolve uyğun gəlir

ArcGIS -dən çıxışı təkrar etməyə çalışıram Çözün geopandalar istifadə edərək bir sıra axın xətləri üzərində. Əslində df/stream_0 təbəqəsi, DEM -dən pysheds istifadə edərək çıxarılan bir axın şəbəkəsidir. Bu çıxışın aradan qaldırmağa çalışdığım təsadüfi üst -üstə düşən çatları var. Qaçır Çözün ArcGIS Pro vasitəsi ilə bunu yaxşı edir, amma bunu həll etmək üçün ArcGIS/ ArcPy ilə məşğul olmamağı istərdim.

Şanssız bir doldurucu sütun istifadə edərək gpd.dissolve () istifadə etməyə çalışdım.

Eyni şəkildə unary_union istifadə etməyə çalışdı formalı bəxti gətirmədən.

Niyə bu qədər problemlə qarşılaşdığımı düşünərək asan bir həll kimi görünür. Mənim GeoDataFrame yalnız xətt geometriyasından ibarətdir, buna görə də toplaya biləcəyim başqa bir xüsusiyyət yoxdur. Mən mahiyyətcə yalnız xətlərin həndəsəsini dəyişməz saxlamağa çalışıram, amma orada ola biləcək üst -üstə düşən xüsusiyyətləri aradan qaldırıram. Mən xətləri bölmək istəmirəm və onları çox hissəli xüsusiyyətlərə birləşdirmək istəmirəm.


Unary_union - Geographic İnformasiya Sistemləri zamanı Shapely (geos) çökür

Müəllif: Sean Gillies, [email protected]>
Versiya: 1.2 və 1.3
Tarix: | bu gün |
Müəlliflik hüququ: Bu iş Creative Commons Attribution 3.0 Amerika Birləşmiş Ştatları Lisenziyası altında lisenziyalaşdırılmışdır.
Xülasə:Bu sənəd, hesablama həndəsəsi üçün Shapely Python paketinin necə istifadə olunacağını izah edir.

Deterministik məkan təhlili, kənd təsərrüfatı, ekologiya, epidemiologiya, sosiologiya və bir çox digər sahələrdəki problemlərə hesablama yanaşmalarının əhəmiyyətli bir hissəsidir. Heyvanların bu yaşayış yerlərinin araşdırılan perimetri/sahə nisbəti nədir? Bu yeni daşqın modelindən 50 illik daşqın konturu ilə bu şəhərdəki hansı xüsusiyyətlər kəsişir? İstehsalçı "A" və "B" işarələri olan qədim keramika məmulatları üçün tapıntı yerlərinin ölçüləri nələrdir və ölçülər harada üst -üstə düşür? Ən yaxşı ətəklərin məkana əsaslanan spam zonalarını təyin etdiyi evdən ofisə gedən yol nədir? Bunlar, statistik olmayan məkan təhlili və daha konkret olaraq hesablama həndəsəsi ilə həll edilə bilən mümkün suallardan yalnız bir neçəsidir.

Shapely, tanınmış və geniş yayılmış GEOS kitabxanasından (Python: mod: `ctypes` modulu vasitəsi ilə) istifadə edərək planlı xüsusiyyətlərin set-nəzəri təhlili və manipulyasiyası üçün bir Python paketidir. Java Topology Suite (JTS) limanı olan GEOS, PostgreSQL RDBMS üçün PostGIS məkan uzantısının həndəsə mühərrikidir. JTS və GEOS -un dizaynları əsasən Açıq Yer Məkanı Konsorsiumunun Sadə Xüsusiyyətlərə Giriş Spesifikasiyası [1] tərəfindən idarə olunur və Shapely əsasən eyni standart siniflər və əməliyyatlara uyğundur. Shapely bununla coğrafi informasiya sistemlərinin (GIS) dünyasının konvensiyalarında dərindən kök salmışdır, lakin qeyri-ənənəvi problemlər üzərində işləyən proqramçılar üçün eyni dərəcədə faydalı olmağa can atır.

Shapely -nin ilk şərti Python proqramçılarının bir RDBMS xaricində PostGIS tipli həndəsə əməliyyatlarını yerinə yetirə bilməsidir. Bütün coğrafi məlumatlar bir RDBMS -də əmələ gəlmir və ya orada yerləşmir və ya ən yaxşı şəkildə SQL ilə işlənmir. İşi yerinə yetirmək üçün məlumatları məkan RDBMS -ə yükləyə bilərik, ancaq iş üçün səhv alətdən istifadə etdiyimiz verilənlər bazasında vaxt keçdikcə məlumatları idarə etmək ("RDBMS" dəki "M") yoxdursa. İkinci şərt, xüsusiyyətlərin davamlılığı, seriyalaşdırılması və xəritə proyeksiyasının əhəmiyyətli, lakin ortogonal problemlər olmasıdır. Yüz GIS formatlı oxucuya və yazıçıya və ya çoxlu Dövlət Təyyarəsi proqnozlarına ehtiyacınız olmaya bilər və Shapely onları sizə yükləməz. Üçüncü əsas, Python deyimlərinin GIS (və ya Java, bu vəziyyətdə, GEOS kitabxanası Java layihəsi olan JTS -dən götürüldüyü üçün) ifadələrini üstələməsidir.

İdiomatik Pythondan zövq alırsınızsa və bir şey əldə edirsinizsə, bir şeyi yaxşı yerinə yetirən paketləri qiymətləndirin və fəza cəhətdən aktiv bir RDBMS -in hesablama həndəsəsi işiniz üçün çox vaxt səhv bir vasitə olduğunu qəbul edin, Shapely sizin üçün ola bilər.

Shapely tərəfindən tətbiq olunan həndəsi cisimlərin əsas növləri nöqtələr, əyrilər və səthlərdir. Hər biri müstəvidə üç (bəlkə də sonsuz) nöqtə dəsti ilə əlaqələndirilir. Bir xüsusiyyətin daxili, sərhəd və xarici dəstləri bir -birini istisna edir və onların birləşməsi bütün təyyarə ilə üst -üstə düşür [2].

  • Nöqtənin tam olaraq bir nöqtədən ibarət daxili dəsti, tam olaraq heç bir nöqtədən ibarət olmayan bir sərhəd dəsti və digər bütün nöqtələrdən ibarət bir xarici dəsti var. Bir nöqtənin 0 topoloji ölçüsü var.
  • Bir əyrinin uzunluğu boyunca sonsuz çox nöqtədən ibarət olan bir daxili dəsti (kosmosda sürüklənən bir nöqtəni təsəvvür edin), iki son nöqtəsindən ibarət bir sərhəd dəsti və digər bütün nöqtələrin xarici dəsti var. Bir əyrinin topoloji ölçüsü 1 -dir.
  • Səthin içərisində sonsuz çox nöqtədən ibarət bir daxili dəsti var (bir sahəni əhatə etmək üçün kosmosda sürüklənən bir əyri təsəvvür edin), bir və ya daha çox əyrilərdən ibarət bir sərhəd dəsti və çuxurların içərisində olanlar da daxil olmaqla bütün digər nöqtələrin xarici dəsti var. səthində mövcuddur. Bir səthin topoloji ölçüsü 2 -dir.

Bu bir az ezoterik görünə bilər, ancaq Shapely -nin məkan predikatlarının mənalarını aydınlaşdırmağa kömək edəcək və bu təlimatın gedəcəyi qədər nəzəriyyənin dərinliyindədir. Fərqli siniflər üçün özlərini "gotchas" kimi göstərənlər də daxil olmaqla nöqtə-dəstə nəzəriyyəsinin nəticələri bu təlimatda daha sonra müzakirə olunacaq.

Nöqtə növü LineString və LinearRing sinifləri tərəfindən Point sinfi əyrisi ilə, səthi isə Polygon sinfi ilə həyata keçirilir. Formalı olaraq hamar (yəni davamlı teğetlərə malik) əyrilər tətbiq etmir. Bütün əyrilər xətti xətlərlə yaxınlaşdırılmalıdır. Bütün yuvarlaq yamalar xətti xətlər ilə məhdudlaşdırılmış bölgələrə yaxınlaşdırılmalıdır.

Xal kolleksiyaları MultiPoint sinfi, MultiLineString sinfi tərəfindən əyrilər toplusu və MultiPolygon sinfi tərəfindən səth kolleksiyaları tərəfindən həyata keçirilir. Bu kolleksiyalar hesablama baxımından əhəmiyyətli deyil, lakin müəyyən növ xüsusiyyətləri modelləşdirmək üçün faydalıdır. Məsələn, Y şəkilli xətt xüsusiyyəti, MultiLineString tərəfindən bütövlükdə yaxşı modelləşdirilmişdir.

Standart məlumat modeli, bu təlimatın sonrakı hissələrində müzakirə ediləcək həndəsi cisimlərin müəyyən növlərinə xas olan əlavə məhdudiyyətlərə malikdir.

Fəza məlumat modeli, həndəsi cisimlər arasında - ehtiva edən, kəsişən, üst -üstə düşən, toxunan və s. - bir qrup təbii dil əlaqələri və komponent nöqtələri dəstlərinin qarşılıqlı kəsişmələrinin 3x3 matrisindən istifadə etməklə nəzəri bir çərçivə ilə müşayiət olunur. ]: DE-9IM. DE-9IM baxımından əlaqələrin hərtərəfli nəzərdən keçirilməsi [4] -də tapılmışdır və bu təlimatda təkrarlanmayacaqdır.

JTS texniki xüsusiyyətlərinə [5] uyğun olaraq, bu təlimat konstruktiv (tampon, qabarcıq gövdə) və set-nəzəri əməliyyatlar (kəsişmə, birləşmə və s.) Arasında fərq qoyacaq. Fərdi əməliyyatlar təlimatın növbəti hissəsində tam təsvir ediləcəkdir.

Yer düz olmasa da və bu sferik deyilsə də - Yerin xüsusiyyətlərini Kartezyen müstəviyə çevirməklə, sınanmış və həqiqi alqoritmləri tətbiq etməklə, sonra nəticələri coğrafi koordinatlara çevirməklə həll edilə bilən bir çox analitik problem var. Bu təcrübə dəqiq kağız xəritələri ənənəsi qədər qədimdir.

Shapely koordinat sistemi çevrilməsini dəstəkləmir. İki və ya daha çox xüsusiyyət üzərində edilən bütün əməliyyatlar, xüsusiyyətlərin eyni Kartezyen müstəvisində mövcud olduğunu güman edir.

Həndəsi cisimlər, sinifləri nümunə fabrikləri olaraq istifadə edərək, tipik Python tərzində yaradılmışdır. Daxili xüsusiyyətlərindən bir neçəsi bu bölmələrdə, digərləri əməliyyatlar və serializasiya ilə bağlı aşağıdakı bölmələrdə müzakirə ediləcəkdir.

Point, LineString və LinearRing nümunələri ən vacib atribut olaraq daxili, sərhəd və xarici nöqtə dəstlərini təyin edən sonlu koordinatlar ardıcıllığına malikdir. Bir xətt simvolu ən az 2 nöqtə ilə müəyyən edilə bilər, lakin sonsuz sayda nöqtə ehtiva edir. Koordinat ardıcıllığı dəyişməzdir. Nümunələr qurarkən üçüncü bir z koordinat dəyəri istifadə edilə bilər, lakin həndəsi təhlilə heç bir təsiri yoxdur. Bütün əməliyyatlar x-y müstəvisində aparılır.

Bütün konstruktorlarda ədədi dəyərlər float tipinə çevrilir. Başqa sözlə, Point (0, 0) və Point (0.0, 0.0) həndəsi cəhətdən ekvivalent nümunələr yaradır. Şapely, nümunələrin tikintisində topoloji sadəliyi və ya etibarlılığını yoxlamır, çünki əksər hallarda xərclər əsassızdır. Doğrulama fabrikləri:


Məkan Analizi Metodları

Boolean atributları və metodları ilə yanaşı, Shapely yeni həndəsi cisimləri qaytaran analiz üsulları təqdim edir.

Set-nəzəri metodlar

Demək olar ki, hər bir ikili predikat metodunun yeni bir həndəsi cisim qaytaran həmkarı var. Bundan əlavə, bir obyektin set-teoretik sərhədi yalnız oxunaqlı bir atribut olaraq mövcuddur.

Obyektin nəzəri sərhədini təmsil edən daha aşağı ölçülü bir obyekt qaytarır.

Bir çoxbucağın sərhədi bir xəttdir, bir xəttin sərhədi nöqtələr toplusudur. Bir nöqtənin sərhədi boş (sıfır) bir kolleksiyadır.

İçindəki rəqəmlərə baxın LineStringsXətlər Kolleksiyası xətlərin və onların sərhədlərinin təsviri üçün.

Obyektin həndəsi mərkəzinin (nöqtəsinin) təsvirini qaytarır.

Bir obyektin mərkəz nöqtəsi onun nöqtələrindən biri ola bilər, amma buna zəmanət verilmir.

Bu həndəsi cismi meydana gətirməyən nöqtələrin təsvirini qaytarır digər obyekt

Bufer () metodu, bu hissənin nümunələrində təxminən dairəvi çoxbucaqlılar istehsal etmək üçün istifadə olunur, bu təlimatda daha sonra ətraflı izah ediləcəkdir.

Şəkil 8. Təxminən iki dairəvi çoxbucaqlı arasındakı fərqlər.

Shapely, bir obyekt ilə aşağı ölçülü bir obyekt arasındakı fərqi (məsələn, çoxbucaqlı ilə bir xətt və ya nöqtə arasındakı fərqi) tək bir obyekt olaraq təmsil edə bilməz və bu hallarda fərq metodu, öz adlı obyektin surətini qaytarır.

Bu obyektin digər həndəsi cisimlə kəsişməsini əks etdirir.

Aşağıdakı symmetric_difference () altındakı rəqəmə baxın.

Bu həndəsi cisimdə olmayan, digər həndəsi cisimdəki nöqtələrin təsvirini qaytarır.

Bu obyektdən və digər həndəsi cisimlərdən nöqtələrin birləşməsini əks etdirir.

Qaytarılan obyektin növü operandlar arasındakı əlaqədən asılıdır. Çoxbucaqlıların birliyi (məsələn) kəsişib-kəsilməməsindən asılı olaraq çoxbucaqlı və ya çoxbucaqlı olacaq.

Bu əməliyyatların semantikası həndəsi cisimlərin növünə görə dəyişir. Məsələn, çoxbucaqlıların birliyinin sərhədini onların sərhədlərinin birləşməsi ilə müqayisə edin.

union () bir çox obyektin məcmu birləşməsini tapmaq üçün bahalı bir yoldur. Daha təsirli bir üsul üçün şekli.ops.cascaded_union () a baxın.

Konstruktiv metodlar

Formalı həndəsi cisimlər, teoretik təhlildən əldə edilməmiş yeni obyektlər verən bir neçə üsula malikdir.

object.buffer (məsafə, qətnamə = 16, cap_style = 1, join_style = 1, mitre_limit = 1.0)

Bu həndəsi cisimdən müəyyən bir məsafədəki bütün nöqtələrin təxmini təsvirini qaytarır.

Qapaqların üslubları tam ədədlərlə təyin olunur: 1 (yuvarlaq), 2 (düz), 3 (kvadrat). Bu dəyərlər də objecthapely.geometry.CAP_STYLE tərəfindən sadalanır (aşağıya baxın).

Ofset seqmentləri arasındakı birləşmə üslubları tam ədədlərlə müəyyən edilir: 1 (yuvarlaq), 2 (miter) və 3 (əyilmiş). Bu dəyərlər eyni zamanda objectly.geometry.JOIN_STYLE obyekti ilə də sadalanmışdır (aşağıya baxın).

Müsbət bir məsafənin genişlənməsinə mənfi bir məsafənin, eroziyanın təsiri var. İsteğe bağlı həll arqumenti, bir nöqtə ətrafında dörddə bir dairəni təxmini olaraq istifadə etmək üçün istifadə olunan seqmentlərin sayını təyin edir.

Şəkil 9. Bir xəttin genişlənməsi (solda) və çoxbucağın eroziyası (sağda). Yeni obyekt mavi rəngdə göstərilir.

Bir nöqtənin varsayılan (16 qətnamə) tamponu, dairəvi disk sahəsinin 99,8% -i ilə yaxınlaşdığı çoxbucaqlı bir yamaqdır.

1 qətnamə ilə tampon bir kvadrat yamaqdır.

0 məsafə keçdikdən sonra, tampon () klassik "papaq" kimi özünə toxunan və ya öz-özünə keçən çoxbucaqlıları "təmizləmək" üçün istifadə edilə bilər.

Tamponlama, çoxbucağı toxunduqları yerdə ikiyə bölür.

Obyektdəki nöqtələrin sayı üçdən az olmadığı təqdirdə, obyektdəki bütün nöqtələri özündə cəmləşdirən ən kiçik qabarıq çoxbucaqlı təsviri qaytarır. İki nöqtə üçün qabarıq gövdə 1, bir nöqtə üçün LineStringə çökür.

Şəkil 10. 2 nöqtədən (solda) və 6 nöqtədən (sağda) qabarıq gövdə (mavi).

Nöqtənin və ya obyekti ehtiva edən ən kiçik düzbucaqlı çoxbucağın (tərəfləri koordinat oxlarına paralel olan) təsvirini qaytarır.

obyekt.parallel_offset (məsafə, tərəf, qətnamə = 16, join_style = 1, mitre_limit = 1.0)

Sağdakı və ya sol tərəfindəki obyektdən bir məsafədə bir LineString və ya MultiLineString həndəsəsini qaytarır.

Məsafə müsbət üzmə dəyəri olmalıdır. Yan parametr "sol" və ya "sağ" ola bilər. Obyektin hər bir təpəsi ətrafında ofsetin həlli bufer metodunda olduğu kimi parametrləşdirilir.

Birləşmə tərzi, xətt seqmentləri arasındakı kənar künclər üçündür. Qəbul edilən tam ədədlər 1 (yuvarlaq), 2 (miter) və 3 (əyilmə) dir. Əlavə olaraq geometry.JOIN_STYLE -ə baxın.

Ciddi kəsilmiş künclər mitre_limit parametri ilə idarə oluna bilər (İngilis dilində yazılmışdır, en-gb). Mitred ofset küncünün ucuna olan məsafənin nisbəti miter nisbətidir. Limiti aşan nisbətli künclər kəsiləcək.

Bu üsul yalnız LinearRing və LineString obyektləri üçün mövcuddur.

Şəkil 11. Sadə bir xəttin sol tərəfində paralel ofset xətlərinin üç üslubu (başlanğıc nöqtəsi bir dairə olaraq göstərilmişdir) və bir tərəfi çox tərəfli.

Mitre_limit parametrinin təsiri aşağıda göstərilmişdir.

Şəkil 12. Sol və sağ ofsetlər üçün böyük və kiçik mitre_limit dəyərləri.

Həndəsi obyektin sadələşdirilmiş təsvirini qaytarır.

Sadələşdirilmiş obyektdəki bütün nöqtələr orijinal həndəsənin tolerantlıq məsafəsində olacaq. Varsayılan olaraq, topologiyanı qoruyan daha yavaş bir alqoritm istifadə olunur. Qoruma topologiyası False olaraq təyin edilərsə, daha sürətli Douglas-Peucker alqoritmi [6] istifadə olunur.

Şəkil 13. 0.2 (solda) və 0.5 (sağda) tolerantlıqdan istifadə edərək, demək olar ki, dairəvi çoxbucaqlılığın sadələşdirilməsi.

Yanlış həndəsi cisimlər, topologiyanı qorumayan sadələşdirmə nəticəsində yarana bilər.


Affine çevrilmələri

Afin çevrilmə funksiyalarının toplusu, birbaşa afin çevrilmə matrisinə əmsallar verməklə və ya xüsusi olaraq adlandırılmış çevrilmədən istifadə etməklə (çevrilmə, miqyas və s.) Funksiyalar bütün həndəsə növləri ilə (GeometryCollection istisna olmaqla) istifadə edilə bilər və 3D növləri ya qorunub saxlanılır, ya da 3D affine çevrilmələri ilə dəstəklənir.

Afin çevrilmə matrisindən istifadə edərək çevrilmiş həndəsəni qaytarır.

Katsayı matrisi, müvafiq olaraq 2D və ya 3D çevrilmələr üçün 6 və ya 12 maddədən ibarət siyahı və ya tuple şəklində təqdim olunur.

2D affine çevrilmələri üçün 6 parametr matrisi:

artırılmış matrisi təmsil edən:

və ya çevrilmiş koordinatlar üçün tənliklər:

3D affine çevrilmələri üçün 12 parametr matrisi:

artırılmış matrisi təmsil edən:

və ya çevrilmiş koordinatlar üçün tənliklər:

2D müstəvidə dönmüş bir həndəsə qaytarır.

Use_radians =True parametrini təyin etməklə fırlanma bucağı ya dərəcə (standart), ya da radian olaraq təyin edilə bilər. Pozitiv bucaqlar saat əqrəbinin əksinə, mənfi isə saat yönünün əksinədir.

Mənşə nöqtəsi, məhdudlaşdıran qutu mərkəzi üçün 'center ' (açar sözlər), həndəsənin sentroidi, Point obyekti və ya koordinat tuplu (x0, y0) üçün 'centroid ' açar sözü ola bilər.

Bucaq teta ilə 2D fırlanma üçün afin çevrilmə matrisi:

ofsetlərin mənşəyindən hesablandığı yer (x_0, y_0):

x_ mathrm & amp = x_0 - x_0 cos < theta> + y_0 sin < theta> y_ mathrm & amp = y_0 - x_0 sin < theta> - y_0 cos

Şəkil 14. LineStringin (boz) fərqli mənşələrdən istifadə edərək saat əqrəbinin əksinə (mavi) 90 ° bucaqla fırlanması.

Hər bir ölçü boyunca faktorlar ilə ölçülən miqyaslı bir həndəsə qaytarır.

Mənşə nöqtəsi 2D məhdudlaşdırma qutusu mərkəzi üçün açar sözlər və#39center ' (standart), həndəsənin 2D centroid, Point obyekti və ya koordinat tuplu (x0, y0, z0) üçün 'centroid ' ola bilər.

Mənfi miqyas amilləri koordinatları əks etdirəcək və ya əks etdirəcək.

Ölçmə üçün ümumi 3D affine çevrilmə matrisi:

başlayın x_ mathrm & amp 0 & amp 0 & amp x_ mathrm 0 və y_ mathrm & amp 0 & amp y_ mathrm 0 & amp 0 & amp z_ mathrm & amp; z_ mathrm 0 & amp 0 & amp 0 & amp 1 end

ofsetlərin mənşəyindən hesablandığı yer (x_0, y_0, z_0):

x_ mathrm & amp = x_0 - x_0 x_ mathrm y_ mathrm & amp = y_0 - y_0 y_ mathrm z_ mathrm & amp = z_0 - z_0 z_ mathrm

Şəkil 15. Boz üçbucağın göyə doğru ölçülməsi: a) x-istiqamətində 1,5 faktorla, y-oxu boyunca əks olunmaqla b) xüsusi istiqamətdə x-istiqaməti ilə 2-ə nisbətdə (1, 1) .

X və y ölçüləri boyunca bucaqlarla kəsilmiş əyri həndəsə qaytarır.

Use_radians =True parametrini təyin etməklə kəsmə bucağı ya dərəcə (standart) və ya radian olaraq təyin edilə bilər.

Mənşə nöqtəsi, məhdudlaşdıran qutu mərkəzi üçün 'center ' (açar sözlər), həndəsənin sentroidi, Point obyekti və ya koordinat tuplu (x0, y0) üçün 'centroid ' açar sözü ola bilər.

Əyilmə üçün ümumi 2D afin transformasiya matrisi:

ofsetlərin mənşəyindən hesablandığı yer (x_0, y_0):

Şəkil 16. Boz rəngli "R" işarəsinin mavi rəngə əyilməsi: a) x istiqaməti üzrə 20 ° kəsmə bucağı ilə və (1, 1) b) mənşəyi y boyunca 30 ° kəsmə bucağı ilə istiqamət, standart mənşəyi istifadə edərək.

Hər ölçü boyunca ofsetlər tərəfindən dəyişdirilmiş tərcümə edilmiş həndəsəni qaytarır.

Tərcümə üçün ümumi 3D affine çevrilmə matrisi:

başlayın 1 & amp 0 & amp 0 & amp x_ mathrm 0 & amp 1 & amp 0 & amp y_ mathrm 0 & amp 0 & amp 1 və amp z_ mathrm 0 & amp 0 & amp 0 & amp 1 end


Python 几何 库 _Shapely 地理 空间 几何 库 , 使用 手册 (英 英

Bu sənəd, hesablama həndəsəsi üçün Shapely Python paketinin necə istifadə olunacağını izah edir.

Deterministik məkan təhlili, kənd təsərrüfatı, ekologiya, epidemiologiya, sosiologiya və bir çox digər sahələrdəki problemlərə hesablama yanaşmalarının əhəmiyyətli bir hissəsidir. Heyvanların bu yaşayış yerlərinin araşdırılan perimetri/sahə nisbəti nədir? Bu yeni daşqın modelindən 50 illik daşqın konturu ilə bu şəhərdəki hansı xüsusiyyətlər kəsişir? İstehsalçının "A" və "B" işarələri olan qədim keramika məmulatları üçün tapıntı yerləri nələrdir və harada üst -üstə düşür? Ən yaxşı ətəklərin məkana əsaslanan spam zonalarını təyin etdiyi evdən ofisə gedən yol nədir? Bunlar, statistik olmayan məkan təhlili və daha konkret olaraq hesablama həndəsəsi ilə həll edilə bilən mümkün suallardan yalnız bir neçəsidir.

Shapely, tanınmış və geniş yayılmış GEOS kitabxanasındakı (Python ctypes modulu vasitəsi ilə) funksiyalardan istifadə edərək planlı xüsusiyyətlərin set-nəzəri təhlili və manipulyasiyası üçün bir Python paketidir. Java Topology Suite (JTS) limanı olan GEOS, PostgreSQL RDBMS üçün PostGIS məkan uzantısının həndəsə mühərrikidir. JTS və GEOS -un dizaynları əsasən Açıq Coğrafi Konsorsiumun Sadə Xüsusiyyətlərə Giriş Spesifikasiyası [1] tərəfindən idarə olunur və Shapely əsasən eyni standart sinif və əməliyyat dəstinə uyğundur. Shapely bununla coğrafi informasiya sistemlərinin (GIS) dünyasının konvensiyalarına köklü şəkildə kök salmışdır, lakin qeyri-ənənəvi problemlər üzərində işləyən proqramçılar üçün eyni dərəcədə faydalı olmağa can atır.

Shapely -nin ilk şərti Python proqramçılarının bir RDBMS xaricində PostGIS tipli həndəsə əməliyyatlarını yerinə yetirə bilməsidir. Bütün coğrafi məlumatlar bir RDBMS -də əmələ gəlmir və ya orada yerləşmir və ya ən yaxşı şəkildə SQL ilə işlənmir. İşləmək üçün məlumatları məkan RDBMS -ə yükləyə bilərik, ancaq məlumatları idarə etmək üçün heç bir səlahiyyət olmadıqda ("RDBMS" dəki "M") iş üçün yanlış vasitədən istifadə edirik. İkinci şərt, xüsusiyyətlərin davamlılığı, seriyalaşdırılması və xəritə proyeksiyasının əhəmiyyətli, lakin ortogonal problemlər olmasıdır. Yüz GIS formatlı oxucuya və yazıçıya və ya Dövlət Təyyarəsinin çoxsaylı proqnozlarına ehtiyacınız olmaya bilər və Shapely onları sizə yükləməz. Üçüncü əsas, Python deyimlərinin GIS (və ya Java, bu vəziyyətdə, GEOS kitabxanası Java layihəsi olan JTS -dən götürüldüyü üçün) ifadələrini üstələməsidir.

Idiomatik Pythondan zövq alırsınızsa və bir şey əldə edirsinizsə, bir şeyi yaxşı edən paketləri qiymətləndirin və məkan cəhətdən aktiv bir RDBMS -in hesablama həndəsəsi işiniz üçün çox vaxt səhv bir vasitə olduğunu qəbul edin, Shapely sizin üçün ola bilər.

Shapely tərəfindən tətbiq olunan həndəsi cisimlərin əsas növləri nöqtələr, əyrilər və səthlərdir. Hər biri müstəvidə üç (bəlkə də sonsuz) nöqtə dəsti ilə əlaqələndirilir. Bir xüsusiyyətin daxili, sərhəd və xarici quruluşları bir -birini istisna edir və onların birləşməsi bütün müstəviyə təsadüf edir [2].

APoin tam olaraq bir nöqtədən, tam olaraq heç bir nöqtədən çoxlu və digər bütün nöqtələrdən kənar xarici dəstə malikdir. APoin 0 topoloji ölçüsünə malikdir.

A Curve, uzunluğu boyunca sonsuz çox nöqtədən ibarət olan bir daxili quruluşa malikdir (təsəvvür edin ki, kosmosda bir nöqtəyə sürüklənmiş kimi təsəvvür edin), iki son nöqtədən ibarət çoxlu dəst və digər bütün nöqtələrin xarici dəsti var. ACurve 1 -in topoloji ölçüsünə malikdir.

ASurface, içərisində sonsuz çox nöqtədən ibarət bir daxili dəstə malikdir (təsəvvür edin ki, bir sahəni əhatə etmək üçün kosmosda əyilmiş), bir və ya daha çox əyrilərdən ibarət çoxlu dəstə və səthdə mövcud ola biləcək çuxurlar daxil olmaqla bütün digər nöqtələrin xarici küncünə malikdir. ASurface 2 -nin topoloji ölçüsünə malikdir.

Bu bir az ezoterik görünə bilər, ancaq Shapely -nin məkan predikatlarının mənalarını aydınlaşdırmağa kömək edəcək və bu təlimatın gedəcəyi qədər nəzəriyyənin dərinliyindədir. Fərqli siniflər üçün özlərini "gotchas" kimi göstərənlər də daxil olmaqla nöqtə-nəzəriyyə nəzəriyyəsinin nəticələri bu dərslikdə daha sonra müzakirə olunacaq.

Nöqtə növü aLointStringandLinearRingclasses tərəfindən aPointclass əyrisi və səth aPolygonclass tərəfindən həyata keçirilir. Formalı olaraq hamar (yəni davamlı teğetlərə malik) əyrilər tətbiq etmir. Bütün əyrilər xətti xətlər ilə yaxınlaşdırılmalıdır. Bütün yuvarlaq yamalar xətti xətlər ilə məhdudlaşdırılmış bölgələrə yaxınlaşdırılmalıdır.

Xalların toplanması aMultiPointclass, aMultiLineStringclass tərəfindən əyrilərin toplanması və aMultiPolygonclass tərəfindən səthlərin toplanması həyata keçirilir. Bu kolleksiyalar hesablama baxımından əhəmiyyətli deyil, lakin müəyyən növ xüsusiyyətləri modelləşdirmək üçün faydalıdır. Y şəkilli bir xətt xüsusiyyəti, aMultiLineString tərəfindən bütövlükdə yaxşı modelləşdirilmişdir.

Standart məlumat modelində, bu təlimatın sonrakı hissələrində müzakirə ediləcək həndəsi cisimlərin müəyyən növlərinə xas olan əlavə məhdudiyyətlər var.

Fəza məlumat modeli, həndəsi cisimlər arasında - tərkibində, kəsişməsində, üst -üstə düşməsində, toxunmasında və s.- bir sıra təbii dil əlaqələri və komponent nöqtələrinin qarşılıqlı kəsişmələrinin 3x3 matrisindən istifadə edərək onları anlamaq üçün nəzəri bir çərçivə ilə müşayiət olunur. ]: DE-9IM. DE-9IM baxımından əlaqələrin hərtərəfli nəzərdən keçirilməsi [4] -də tapılmışdır və bu təlimatda təkrarlanmayacaqdır.

JTS texniki xüsusiyyətlərinə [5] uyğun olaraq, bu təlimat konstruktiv (tampon, qabarcıq gövdə) və set-nəzəri əməliyyatlar (kəsişmə, birləşmə və s.) Arasında fərq qoyacaq. Fərdi əməliyyatlar təlimatın növbəti hissəsində tam təsvir ediləcəkdir.

Yer düz olmasa da və bu sferik deyilsə də - Yerin xüsusiyyətlərini Kartezyen müstəviyə çevirməklə, sınanmış və həqiqi alqoritmləri tətbiq etməklə, sonra nəticələri coğrafi koordinatlara çevirməklə həll edilə bilən bir çox analitik problem var. Bu təcrübə dəqiq kağız xəritələri ənənəsi qədər qədimdir.

Shapely koordinat sistemi çevrilməsini dəstəkləmir. İki və ya daha çox xüsusiyyət üzərində edilən bütün əməliyyatlar, xüsusiyyətlərin eyni Kartezyen müstəvisində mövcud olduğunu güman edir.

Həndəsi cisimlər, sinifləri nümunə fabrikləri olaraq istifadə edərək, tipik Python tərzində yaradılmışdır. Daxili xüsusiyyətlərindən bir neçəsi bu bölmələrdə, digərləri əməliyyatlar və serializasiya ilə bağlı aşağıdakı bölmələrdə müzakirə ediləcəkdir.

Point, LineString vəLinearRing nümunələri ən vacib atributu olaraq daxili, sərhəd və xarici nöqtə dəstlərini təyin edən sonlu koordinatlar ardıcıllığıdır. Bir xətt simvolu ən az 2 nöqtə ilə müəyyən edilə bilər, lakin sonsuz sayda nöqtə ehtiva edir. Koordinat ardıcıllığı dəyişməzdir. Nümunələr qurarkən üçüncü bir koordinat dəyəri istifadə edilə bilər, lakin həndəsi təhlilə heç bir təsiri yoxdur. Bütün əməliyyatlar thex-yplane-də aparılır.

Bütün konstruktorlarda ədədi dəyərlər float tipinə çevrilir. Başqa sözlə, Point (0, 0) və Point (0.0, 0.0) həndəsi cəhətdən ekvivalent nümunələr yaradır. Şapely, nümunələrin tikintisində topoloji sadəliyi və ya etibarlılığını yoxlamır, çünki əksər hallarda xərclər əsassızdır. Doğrulama fabrikləri, is_validpredicate istifadə edərək, tələb edən istifadəçilər tərəfindən mənasız olaraq həyata keçirilir.

Ümumi xüsusiyyətlər və metodlar

Obyektin sahəsini (float) qaytarır.

Obyekti məhdudlaşdıran (minx, miny, maxx, maxy) tuple (float dəyərləri) qaytarır.

Obyektin uzunluğunu (float) qaytarır.

[1] -ə uyğun olaraq obyektin Geometriya Tipini təyin edən bir sətir qaytarır.

Minimum məsafəni (float) theothergeometric obyektə qaytarır.

Həndəsi obyekt daxilində olması zəmanət verilən ucuz hesablanmış bir nöqtəni qaytarır.

Bu ümumilikdə centroid ilə eyni deyil.

& gt & gt & gt donut = Point (0, 0) .buffer (2.0) .fark (Point (0, 0). tampon (1.0))

& gt & gt & gt donut.centroid.wkt 'POINT (-0.0000000000000001 -0.0000000000000000) '

& gt & gt & gt donut.representative_point (). wkt 'POINT (-1.5000000000000000 0.0000000000000000) '

ThePointconstructor mövqe koordinat dəyərləri və ya nöqtə tuple parametrləri alır.

& gt & gt & gt shapely.geometry idxal nöqtəsindən

AP sıfır sahəyə və sıfır uzunluğa malikdir.

Itsx-ybounding qutusu (minx, miny, maxx, maxy) tuple.

Koordinat dəyərlərinə viacoords, x, y və andproproperties daxil olur.

Koordinatlar da dilimlənə bilər.Yeni versiyası 1.2.14.

ThePointconstructor başqa bir Pointinstance qəbul edir və bununla da surəti çıxarır.

TheLineStringconstructor, 2 və ya daha çox (x, y [, z]) nöqtə tuplarının sifarişli bir ardıcıllığını alır.

BuildedLineStringobject, nöqtələr arasındakı bir və ya daha çox bağlı xətti splini təmsil edir. Sifariş verilən ardıcıllıqla təkrarlanan nöqtələrə icazə verilir, lakin performans cərimələri ola bilər və bunlardan qaçınmaq lazımdır. ALineString öz -özünə keçə bilər (yəni mürəkkəb və sadə deyil).

Şəkil 1. Solda sadəLineString, sağda kompleksLineStringon. Hər birinin (MultiPoint) sərhədi qara, xətləri təsvir edən digər nöqtələr boz rəngdə göstərilir.

ALineStringin sıfır sahəsi və sıfır olmayan uzunluğu var.

& gt & gt & gt, formally.geometrydən LineString idxal edir

Itsx-ybounding qutusu (minx, miny, maxx, maxy) tuple.

Müəyyən edən koordinat dəyərlərinə thecoordsproperty vasitəsilə daxil olur.

Koordinatlar da dilimlənə bilər.Yeni versiyası 1.2.14.

Konstruktor başqa bir LineStringinstance qəbul edir və bununla da surəti çıxarır.

Pointinstances ardıcıllığı etibarlı bir konstruktor parametri deyil. ALineStringis nöqtələrlə təsvir olunur, lakin Pointinstanclardan ibarət deyil.

TheLinearRingconstructor (x, y [, z]) nöqtə tuplarının sifarişli bir ardıcıllığını alır.

İlk və son indekslərdə eyni dəyərləri keçməklə ardıcıllıq açıq şəkildə bağlana bilər. Əks təqdirdə, ilk tuple son indeksə kopyalanaraq ardıcıllıq örtüklə bağlanacaq. ALineString -də olduğu kimi, sıralanan ardıcıllıqla təkrarlanan nöqtələrə icazə verilir, lakin performans cərimələrinə səbəb ola bilər və bunlardan çəkinmək lazımdır. ALinearRing öz -özünə keçə bilməz və heç bir nöqtədə özünə toxunmaya bilər.

Şəkil 2. Solda etibarlıLinearRingon, sağda özünə toxunmayanLinearRingon. Üzükləri təsvir edən nöqtələr boz rəngdə göstərilmişdir. Bir halqanın sərhədi boşdur.

Shapely belə üzüklərin yaradılmasına mane olmayacaq, ancaq əməliyyat edildikdə istisnalar qaldırılacaq.

ALinearRing sıfır sahəyə və sıfır olmayan uzunluğa malikdir.

& gt & gt & gt from formally.geometry.polygon import LinearRing

Itsx-ybounding qutusu (minx, miny, maxx, maxy) tuple.

Koordinat dəyərlərinin təyin edilməsinə thecoordsproperty vasitəsilə daxil olur.

TheLinearRingconstructor, başqa bir LineStringorLinearRinginstance qəbul edir və bununla da surəti çıxarır.

WithLineString -də olduğu kimi, Pointinstances ardıcıllığı etibarlı bir konstruktor parametri deyil.

ThePolygonconstructor iki mövqe parametri alır. Birincisi, (x, y [, z]) nöqtə tuplarının sıralanmış ardıcıllığıdır və LinearRingcase -də olduğu kimi işlənir. İkincisi, xüsusiyyətin daxili sərhədlərini və ya "çuxurlarını" təyin edən halqaya bənzər ardıcıllıqla seçilmiş bir seçimdir.

AvalidPolygon üzükləri bir -birini keçə bilməz, ancaq yalnız bir nöqtəyə toxuna bilər. Again, Shapely will not prevent the creation of invalid features, but exceptions will be raised when they are operated on.

Figure 3. On the left, a validPolygonwith one interior ring that touches the exterior ring at one point, and on the right aPolygonthat isinvalidbecause its interior ring touches the exterior ring at more than one point. The points that describe the rings are shown in grey.

Figure 4. On the left, aPolygonthat isinvalidbecause its exterior and interior rings touch along a line, and on the right, aPolygonthat isinvalidbecause its interior rings touch along a line.

APolygonhas non-zero area and non-zero length.

>>> from shapely.geometry import Polygon

Itsx-ybounding box is a (minx, miny, maxx, maxy) tuple.

Component rings are accessed viaexteriorandinteriorsproperties.

ThePolygonconstructor also accepts instances ofLineStringandLinearRing.

Rectangular polygons occur commonly, and can be conveniently constructed using the shapely.geometry.box() function.

shapely.geometry.box(minx, miny, maxx, maxy, ccw=True)

Makes a rectangular polygon from the provided bounding box values, with counter-clockwise order by default.

>>> from shapely.geometry import box

[(1.0, 0.0), (1.0, 1.0), (0.0, 1.0), (0.0, 0.0), (1.0, 0.0)]

This is the first appearance of an explicit polygon handedness in Shapely.

To obtain a polygon with a known orientation, useshapely.geometry.polygon.orient():

Returns a properly oriented copy of the given polygon. The signed area of the result will have the given sign. A sign of 1.0 means that the coordinates of the product’s exterior ring will be oriented counter-clockwise.

Heterogeneous collections of geometric objects may result from some Shapely operations. For example, twoLineStringsmay intersect along a line and at a point. To represent these kind of results, Shapely provides frozenset-like, immutable collections of geometric objects. The collections may be homogeneous (MultiPointetc.) or heterogeneous.

>>>> from pprint import pprint

Figure 5. a) a green and a yellow line that intersect along a line and at a single point b) the intersection (in blue) is a collection containing oneLineStringand onePoint.

Members of aGeometryCollectionare accessed via thegeomsproperty or via the iterator protocol using in or list().

Homogeneous collections can also be sliced, resulting in a new object of the same type.

>>> from shapely.geometry import MultiPoint

'MULTIPOINT (0.0000000000000000 0.0000000000000000)'

'MULTIPOINT (2.0000000000000000 2.0000000000000000)'

When possible, it is better to use one of the homogeneous collection types described below.

TheMultiPointconstructor takes a sequence of (x, y[, z ]) point tuples.

AMultiPointhas zero area and zero length.

>>> from shapely.geometry import MultiPoint

Itsx-ybounding box is a (minx, miny, maxx, maxy) tuple.

Members of a multi-point collection are accessed via the geoms property or via the iterator protocol using in or list().

The constructor also accepts anotherMultiPointinstance or an unordered sequence ofPointinstances, thereby making copies.

>>> MultiPoint([Point(0, 0), Point(1, 1)])

TheMultiLineStringconstructor takes a sequence of line-like sequences or objects.

Figure 6. On the left, asimple, disconnectedMultiLineString, and on the right, a non-simpleMultiLineString. The points defining the objects are shown in gray, the boundaries of the objects in black.

AMultiLineStringhas zero area and non-zero length.

>>> from shapely.geometry import MultiLineString

Itsx-ybounding box is a (minx, miny, maxx, maxy) tuple.

Its members are instances ofLineStringand are accessed via the geomsproperty or via the iterator protocol using in or list().

The constructor also accepts another instance ofMultiLineStringor an unordered sequence ofLineStringinstances, thereby making copies.

TheMultiPolygonconstructor takes a sequence of exterior ring and hole list tuples: [((a1, . aM), [(b1, . bN), . ]), . ].

More clearly, the constructor also accepts an unordered sequence ofPolygoninstances, thereby making copies.

>>> polygons = MultiPolygon([polygon, s, t])

Figure 7. On the right, avalidMultiPolygonwith 2 members, and on the right, aMultiPolygonthat is invalid because its members touch at an infinite number of points (along a line).

Itsx-ybounding box is a (minx, miny, maxx, maxy) tuple.

Its members are instances ofPolygonand are accessed via the geomsproperty or via the iterator protocol using in or list().

An “empty” feature is one with a point set that coincides with the empty set not None, but like set([]). Empty features can be created by calling the various constructors with no arguments. Almost no operations are supported by empty features.

The coordinates of a empty feature can be set, after which the geometry is no longer empty.

Linear Referencing Methods

It can be useful to specify position along linear features such asLineStringsandMultiLineStringswith a 1-dimensional referencing system. Shapely supports linear referencing based on length or distance, evaluating the distance along a geometric object to the projection of a given point, or the point at a given distance along the object.

Linear referencing methods require GEOS 3.2.0 or later.

Return a point at the specified distance along a linear geometric object.

If thenormalizedarg is True, the distance will be interpreted as a fraction of the geometric object’s length.

>>> ip = LineString([(0, 0), (0, 1), (1, 1)]).interpolate(1.5)

'POINT (0.5000000000000000 1.0000000000000000)'

>>> LineString([(0, 0), (0, 1), (1, 1)]).interpolate(0.75, normalized=True).wkt

'POINT (0.5000000000000000 1.0000000000000000)'

Returns the distance along this geometric object to a point nearest theotherobject.

If thenormalizedarg is True, return the distance normalized to the length of the object. The project() method is the inverse ofinterpolate().

>>> LineString([(0, 0), (0, 1), (1, 1)]).project(ip, normalized=True)

For example, the linear referencing methods might be used to cut lines at a specified distance.

# Cuts a line in two at a distance from its starting point

if distance <= 0.0 or distance >= line.length:

for i, p in enumerate(coords):

LineString(coords[:i] + [(cp.x, cp.y)]),

LineString([(cp.x, cp.y)] + coords[i:])]

>>> line = LineString([(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (5, 0)])

>>> pprint([list(x.coords) for x in cut(line, 1.0)])

[[(0.0, 0.0), (1.0, 0.0)], [(1.0, 0.0), (2.0, 0.0), (3.0, 0.0), (4.0, 0.0), (5.0, 0.0)]]

>>> pprint([list(x.coords) for x in cut(line, 2.5)])

[[(0.0, 0.0), (1.0, 0.0), (2.0, 0.0), (2.5, 0.0)], [(2.5, 0.0), (3.0, 0.0), (4.0, 0.0), (5.0, 0.0)]]

Predicates and Relationships

Objects of the types explained in Geometric Objects provide standard [1]predicates as attributes (for unary predicates) and methods (for binary predicates). Whether unary or binary, all return True or False.

Standard unary predicates are implemented as read-only property attributes. An example will be shown for each.

Returns True if the feature has not onlyxandy, but alsozcoordinates for 3D (or so-called, 2.5D) geometries.

Returns True if coordinates are in counter-clockwise order (bounding a region with positive signed area). This method applies toLinearRingobjects only.

A ring with an undesired orientation can be reversed like this:

Returns True if the feature’sinteriorandboundary(in point set terms) coincide with the empty set.

With the help of the operator module’s attrgetter() function, unary predicates such as is_empty can be easily used as predicates for the built in filter() or itertools.ifilter().

>>> from operator import attrgetter

>>> empties = filter(attrgetter('is_empty'), [Point(), Point(0, 0)])

Returns True if the feature is closed. A closed feature’sboundarycoincides with the empty set.

This property is applicable toLineStringandLinearRinginstances, but meaningless for others.

Returns True if the feature does not cross itself.

The simplicity test is meaningful only forLineStringsandLinearRings.

>>> LineString([(0, 0), (1, 1), (1, -1), (0, 1)]).is_simple

Operations on non-simpleLineStringsare fully supported by Shapely.

Returns True if a feature is “valid” in the sense of [1].

A validLinearRingmay not cross itself or touch itself at a single point. A validPolygonmay not possess any overlapping exterior or interior rings. A validMultiPolygonmay not collect any overlapping polygons. Operations on invalid features may fail.

>>> MultiPolygon([Point(0, 0).buffer(2.0), Point(1, 1).buffer(2.0)]).is_valid

The two points above are close enough that the polygons resulting from the buffer operations (explained in a following section) overlap.

The is_valid predicate can be used to write a validating decorator that could ensure that only valid objects are returned from a constructor function.

from functools import wrapsdef validate(func):

"Given arguments do not determine a valid geometric object")

İzləmə (son zəng):

File "", line 7, in wrappershapely.geos.TopologicalError:

Given arguments do not determine a valid geometric object

Standard binary predicates are implemented as methods. These predicates evaluate topological, set-theoretic relationships. In a few cases the results may not be what one might expect starting from different assumptions. All take another geometric object as argument and return True or False.

Returns True if the object is approximately equal to theotherat all points to specifieddecimalplace precision.

Returns True if the object’sinteriorcontains theboundaryandinteriorof the other object and their boundaries do not touch at all.

This predicate applies to all types, and is inverse to within(). The expression a.contains(b) == b.within(a) always evaluates to True.

A line’s endpoints are part of itsboundaryand are therefore not contained.

Binary predicates can be used directly as predicates for filter() oritertools.ifilter().

>>> contained = filter(line.contains, [Point(), Point(0.5, 0.5)])

>>> [p.wkt for p in contained]['POINT (0.5000000000000000 0.5000000000000000)']

Returns True if theinteriorof the object intersects theinteriorof the other but does not contain it, and the dimension of the intersection is less than the dimension of the one or the other.

>>> LineString(coords).crosses(LineString([(0, 1), (1, 0)]))

A line does not cross a point that it contains.

Returns True if theboundaryandinteriorof the object do not intersect at all with those of the other.

This predicate applies to all types and is the inverse of intersects().

Returns True if the set-theoreticboundary,interior, andexteriorof the object coincide with those of the other.

The coordinates passed to the object constructors are of these sets, and determine them, but are not the entirety of the sets. This is a potential “gotcha” for new users. Equivalent lines, for example, can be constructed differently.

This predicate should not be mistaken for Python’s == or isconstructions.

Returns True if theboundaryandinteriorof the object intersect in any way with those of the other.

This predicate is equivalent to the OR-ing of contains(), crosses(),equals(), touches(), and within().

Returns True if the objects have at least one point in common and their interiors do not intersect with any part of the other.

Overlapping features do not thereforetouch, another potential “gotcha”. For example, the following lines touch at (1, 1), but do not overlap.

Returns True if the object’sboundaryandinteriorintersect only with theinteriorof the other (not itsboundaryorexterior).

This applies to all types and is the inverse of contains().

Used in a sorted()key, within() makes it easy to spatially sort objects. Let’s say we have 4 stereotypic features: a point that is contained by a polygon which is itself contained by another polygon, and a free spirited point contained by none

and that copies of these are collected into a list

that we’d prefer to have ordered as [d, c, c, b, a] in reverse containment order. As explained in the Python Sorting HowTo, we can define a key function that operates on each list element and returns a value for comparison. Our key function will be a wrapper class that implements __lt__() using Shapely’s binary within() predicate.

from shapely.geometry import asShapeclass Within(object):

As the howto says, theless thancomparison is guaranteed to be used in sorting. That’s what we’ll rely on to spatially sort, and the reason why we usewithin() in reverse instead of contains(). Trying it out on featuresdandc, we see that it works.

It also works on the list of features, producing the order we want.

>>> [d, c, c, b, a] == sorted(features, key=Within, reverse=True)

The relate() method tests all the DE-9IM [4] relationships between objects, of which the named relationship predicates above are a subset.

Returns a string representation of the DE-9IM matrix of relationships between an object’sinterior,boundary,exteriorand those of another geometric object.

The named relationship predicates (contains(), etc.) are typically implemented as wrappers around relate().

Two different points have mainly F (false) values in their matrix the intersection of theirexternalsets (the 9th element) is a 2 dimensional object (the rest of the plane). The intersection of theinteriorof one with theexteriorof the other is a 0 dimensional object (3rd and 7th elements of the matrix).

The matrix for a line and a point on the line has more “true” (not F) elements.

Further discussion of the DE-9IM matrix is beyond the scope of this manual. See[4] and http://pypi.python.org/pypi/de9im.

As well as boolean attributes and methods, Shapely provides analysis methods that return new geometric objects.

Almost every binary predicate method has a counterpart that returns a new geometric object. In addition, the set-theoreticboundaryof an object is available as a read-only attribute.

Returns a lower dimensional object representing the object’s set-theoreticboundary.

The boundary of a polygon is a line, the boundary of a line is a collection of points. The boundary of a point is an empty (null) collection.

See the figures in LineStrings and Collections of Lines for the illustration of lines and their boundaries.

Returns a representation of the object’s geometric centroid (point).

'POINT (0.5000000000000000 0.5000000000000000)'

The centroid of an object might be one of its points, but this is not guaranteed.

Returns a representation of the points making up this geometric object that do not make up the other object.

The buffer() method is used to produce approximately circular polygons in the examples of this section it will be explained in detail later in this manual.

Figure 8. Differences between two approximately circular polygons.

Shapely can not represent the difference between an object and a lower dimensional object (such as the difference between a polygon and a line or point) as a single object, and in these cases the difference method returns a copy of the object named self.

Returns a representation of the intersection of this object with theothergeometric object.

See the figure under symmetric_difference() below.

Returns a representation of the points in this object not in theothergeometric object, and the points in theothernot in this geometric object.

Returns a representation of the union of points from this object and theothergeometric object.

The type of object returned depends on the relationship between the operands. The union of polygons (for example) will be a polygon or a multi-polygon depending on whether they intersect or not.

The semantics of these operations vary with type of geometric object. For example, compare the boundary of the union of polygons to the union of their boundaries.

union() is an expensive way to find the cumulative union of many objects. See shapely.ops.cascaded_union() for a more effective method.

Shapely geometric object have several methods that yield new objects not derived from set-theoretic analysis.

object.buffer(distance, resolution៤, cap_styleɣ, join_styleɣ, mitre_limitɣ.0)

Returns an approximate representation of all points within a givendistanceof the this geometric object.