Daha çox

PostGIS -də bir sıra xal mərkəzini necə əldə etmək olar?

PostGIS -də bir sıra xal mərkəzini necə əldə etmək olar?


PostGIS uzantısı ilə PostgreSQL istifadə edirəm.

İçimdə bir sıra nöqtələr varthe_geommasadan sütunmyschema.myobjects. Bu klasterin mərkəzini almaq üçün bir seçim ifadəsi yaratmaq istəyirəm, buna görə də belə bir seçilmiş ifadədən:

Myschema.myobjects dən the_geom SEÇİN

Aşağıdakı kimi bir ifadə üçün düzgün sintaksis tapmalıyam.

ST_AsText SELECT (ST_Centroid ((myshema.myobjects dən_geom SELECT))));

Birlik funksiyasını bu şəkildə istifadə etməlisiniz

Att1, st_centroid (st_union (geom)) SELECT, geom FROM schema.table GROUP BY att1;

Beləliklə, eyni atributa malik olan nöqtənin mərkəzini əldə edə bilərsiniz.


PostGIS, bir neçə həndəsi bir giriş olaraq istifadə edə biləcəyiniz bir həndəsəyə birləşdirmək üçün iki funksiyaya malikdirST_Centroid.

ST_Collect sadəcə dəyişmədən bir sıra həndəsələri birləşdirir.

Alternativ,ST_Union, birdən çox həndəsi "həll edəcək" və artıq komponentləri çıxaracaq. Yəqin ki, bu tətbiq üçün istədiyiniz deyil.

Fərqi görmək üçün müqayisə edin:

SEÇ ST_AsText (ST_Centroid (ST_Union (geom))) FROM (VALUES ('POINT (0 0)'), ('POINT (2 2)'), ('POINT (2 2)')) sq (geom); - NOKTA (11)

SEÇ ST_AsText (ST_Centroid (ST_Collect (geom))) FROM (VALUES ('POINT (0 0)'), ('POINT (2 2)'), ('POINT (2 2)')) sq (geom); - NOKTA (1.33333333333333 1.33333333333333)

Bu halda,ST_Unionikən təkrarlanan nöqtəni silibST_Collectsaxlayıb.


Performans axtarırsınızsa, bu sorğudan istifadə edin:

Orta hesabla (ST_X (the_geom)) uzun, orta (ST_Y (the_geom)), ən FROM masa kimi

az və ya çox eyni çıxışı verir:

SEÇ ST_AsText (ST_Centroid (ST_Collect (the_geom))) FROM cədvəlindən

@dbaston cavabındakı kimi, amma daha sürətli və çox yaddaş istifadə etmir.