PHP KML Polygons birleştirin

1 Cevap php

Ben sadece haritada 1000 özellikleri sağlayan Google Maps API ile ilgili bir sorun var.

Bir veritabanında, ben areas kayıtlarını tutmak. Her bölge, onunla KML çokgen bir bilgi yığın ilişkilendirilmiş bir XML dizesi olarak depolanır oldu. Her bölge bir veya daha fazla çokgen oluşur.

Bazı kullanıcı girişi önüne alındığında, bu alanların bir avuç biri <Placemark> birleştirilir. Ben bir <MultiGeometry> etiketi Zincirleme poligon bilgileri sararak onların kombine geometri olsun.

<Placemark>
    <name>My combined area</name>
    <MultiGeometry>
        <Polygon> (area 1 info) </Polygon>
        <Polygon> (area 2 info) </Polygon>
        <Polygon> (area 2 info) </Polygon>
        <Polygon> (area 3 info) </Polygon>
    </MultiGeometry>
</Placemark>

Sorun, bu alanların çok çok karmaşıktır, ve dolayısıyla, herhangi bir İşaretini çok hızlı belge başına 1000 limit beni iter 100 poligonları sahip olmasıdır.

Şimdi, oldukça işe yaramaz, sürekli bölgenin iç hatları ve çokgen bir sürü kombine alanlar mostly sürekli tek bir alan oluşturmak olduğunu verilmiştir. Bu Poligon döngü mümkündür ve bunları birleştirme (ya da en azından, daha az) çokgenler?

1 Cevap

Depolama yöntemi bu çözmek için çok zor bir sorun yapar. Programlı bitişik çokgenler birleştirme yavaş ve karmaşık olacak.

Aksine XML parçaları depolamak yerine, PostGIS ile PostgreSQL gibi bir CBS etkin veritabanı içine itmek. Bu şekil bilgileri gibi iyi bilinen ikili (WKB) yerine XML parçaları daha nesneleri ve size CBS işleme ve biçimlendirme araçları tam bir paketi verir saklamak için izin verir.

Bunu bu biçimde sahip olduktan sonra bu sorunu çözmek çok kolay olur. Örneğin geometri sütunu "the_geom" denir varsayarak, o zaman aşağıdaki gibi bir sorgu kullanabilirsiniz:

SELECT ST_ASKML(ST_Union(the_geom)) AS area_union_askml
FROM areas 
WHERE (some_filter_expression)
GROUP BY (optional_group_by_expression)

Bu sadece tek bir nesne eşleşen geometrileri birleştirmek için toplama işlevi ST_UNION kullanır ve bir KML fragmanı olarak sonuç sütun çıktılar.

KML Google Maps için çok karmaşıktır çünkü şekiller basitleştirmek gerekirse, bir ST_Simplify veya ST_SimplifyPreserveTopology ekleyebilirsiniz. Eğer sonuç kolaylaştırmak için gerektiğinde algılayabilir böylece de çıkan geometri noktalarının sayısını saymak için ST_NPoints kullanabilirsiniz.