Aracılığıyla paylaş


geo_polygon_densify()

Ara noktalar ekleyerek çokgen veya çok kutuplu planar kenarları jeodeziklere dönüştürür.

Sözdizimi

geo_polygon_densify(çokgen, tolerans, [ preserve_crossing ])

Söz dizimi kuralları hakkında daha fazla bilgi edinin.

Parametreler

Ad Tür Zorunlu Açıklama
çokgen dynamic ✔️ GeoJSON biçiminde çokgen veya çok kutuplu.
hoşgörü int, long veya real Orijinal planar kenar ile dönüştürülmüş jeodezik kenar zinciri arasındaki metre cinsinden maksimum mesafeyi tanımlar. Desteklenen değerler [0,1, 10000] aralığındadır. Belirtilmezse, varsayılan değer olur 10.
preserve_crossing bool ise true, kenar geçişini antimeridian üzerinden korur. Belirtilmezse, varsayılan değer false kullanılır.

Çokgen tanımı

dynamic({"type": "Polygon","coordinates": [ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ]})

dynamic({"type": "MultiPolygon","coordinates": [[ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})

  • LinearRingShell gerekli ve [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]] sıralı bir counterclockwise koordinat dizisi olarak tanımlanır. Tek bir kabuk olabilir.
  • LinearRingHole isteğe bağlıdır ve [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]] sıralı bir clockwise koordinat dizisi olarak tanımlanır. Herhangi bir sayıda iç halka ve delik olabilir.
  • LinearRing köşeler en az üç koordinatla ayrı olmalıdır. İlk koordinat son koordinata eşit olmalıdır. En az dört giriş gereklidir.
  • Koordinatlar [boylam, enlem] geçerli olmalıdır. Boylam [-180, +180] aralığında gerçek bir sayı ve enlem [-90, +90] aralığında gerçek bir sayı olmalıdır.
  • LinearRingShell kürenin büyük bir kısmını çevreler. LinearRing, küreyi iki bölgeye böler. İki bölgenin küçük kısmı seçilir.
  • LinearRing kenar uzunluğu 180 dereceden az olmalıdır. İki köşe arasındaki en kısa kenar seçilir.

Sınırlamalar

  • Densified poligonundaki maksimum nokta sayısı 10485760 ile sınırlıdır.
  • Çokgenleri dinamik biçimde depolamanın boyut sınırları vardır.
  • Geçerli bir çokgenin reddedilmesi çokgeni geçersiz kılabilir. Algoritma, noktaları tekdüzen olmayan bir şekilde ekler ve bu nedenle kenarların birbiriyle iç içe olmasına neden olabilir.

Motivasyon

  • GeoJSON biçimi, iki nokta arasındaki kenarı düz kartezyen çizgi olarak tanımlarken geo_polygon_densify() jeodezik kullanır.
  • Jeodezik veya planlı kenarları kullanma kararı veri kümesine bağlı olabilir ve özellikle uzun kenarlarda geçerlidir.

Döndürülenler

GeoJSON biçiminde ve dinamik bir veri türünde çokgen reddedildi. Çokgen veya tolerans geçersizse, sorgu null bir sonuç üretir.

Not

Jeo-uzamsal koordinatlar WGS-84 koordinat başvuru sistemi tarafından temsil edilen şekilde yorumlanır.

Örnekler

Aşağıdaki örnek, Manhattan Central Park çokgenini reddeder. Kenarlar kısadır ve planlı kenarlar ile jeodezik karşılıkları arasındaki mesafe toleransla belirtilen mesafeden daha azdır. Bu nedenle sonuç değişmeden kalır.

print densified_polygon = tostring(geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[-73.958244,40.800719],[-73.949146,40.79695],[-73.973093,40.764226],[-73.982062,40.768159],[-73.958244,40.800719]]]})))

Çıktı

densified_polygon
{"type":"Polygon","coordinates":[[-73.958244,40.800719],[-73.949146,40.79695],[-73.73.1973093,40.764226],[-73.982062,40.768159],[-73.958244,40.800719]]]}

Aşağıdaki örnek, çokgenin iki kenarını bildirir. Kenar uzunluğu yaklaşık 110 km'dir

print densified_polygon = tostring(geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,10],[11,10],[11,11],[10,11],[10,10]]]})))

Çıktı

densified_polygon
{"type":"Polygon","coordinates":[[10,10],[10,25,10],[10,5,10],[10,75,10],[11,10],[11,11],[10,75,11],[10,5,11],[10,25,11],[10,11],[10,10]]]]}

Aşağıdaki örnek, geçersiz koordinat girişi nedeniyle null bir sonuç döndürür.

print densified_polygon = geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,900],[11,10],[11,11],[10,11],[10,10]]]}))

Çıktı

densified_polygon

Aşağıdaki örnek, geçersiz tolerans girişi nedeniyle null bir sonuç döndürür.

print densified_polygon = geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,10],[11,10],[11,11],[10,11],[10,10]]]}), 0)

Çıktı

densified_polygon