OpenLayers'da geometriyi kaydetme ve geri yükleme

Bağlam. OpenLayers'da yeniyim ama yine de yeniyim.

Temel olarak, çizilen bazı nesnelerin bulunduğu bir haritam var. Doğru anlarsam, birkaç OpenLayer.Feature.Vector (katmanlar?) Var. Birkaç OpenLayer.Geometry "şeyler" (örneğin LinearRing) ile.

Şu anda, .toString () kullanarak geometrinin iyi bir sunumunu yapabiliyor gibiyim. Evet, yanlış yaptığımdan şüpheleniyorum - beni doğru yöne çevirmekten çekinmeyin.

Bu, aşağıdaki gibi veri dizgilerinin okunmasını ve saklanmasını çok kolaylaştırır:

  • NOKTA (-104.74560546875 44.2841796875)

  • POLYGON ((- - 96.52783203125 44.6796875, -96.52783203125 45.734375, -92.22119140625 45.734375, -92.22119140625 44.6796875, -96.52783203125 44.6796875))

  • SATIR (-105.71240234375 44.6796875, -106.06396484375 42.658203125, -103.55908203125 42.7021484375, -103.47119140625 45.55859375, -104.65771484375 45.20703125)

Onları geldikleri nesne formatına geri getirmenin ters bir yolu var mı?

JSON kullanmak istiyorum, ancak GeoJSON OpenLayer.Feature.Vector nesnemi kabul edemiyor gibi görünüyor (bu CLASS_NAME özelliği, içeri baktığımda bunu söylüyor).

Çok teşekkürler.

15
04 марта '11 в 8:00 2011-03-04 08:00 Walt Stoneburner, 04 '11, 08:00 2011-03-04 08:00 saatleri arasında atanmıştır .
@ 2 cevaplar

Openlayers.Geometry, toString yöntemine mükemmel bir şekilde onları WKT'ye (iyi bilinen metin) dönüştürür. Veritabanınızın üstünde bir GIS katmanı kullanıyorsanız (örneğin, PostGres için PostGIS, SQL Server için SQL Spatial, SQLite için Spatialite, vb.), WKT'yi işlemenizi sağlayan işlevler sunmalıdırlar.

Ancak bu Openlayers.Geometry yeni bir Openlayers.Geometry nesnesine (tarayıcıda) dönüştürmek istiyorsanız, fromWKT işlevini kullanabilirsiniz:

 var point = OpenLayers.Geometry.fromWKT('POINT(-104.74560546875 44.2841796875)'); alert(point.toString()); // POINT(-104.74560546875 44.2841796875) 

Burada, point değişkeni şimdi toString() Openlayers.Geometry kullandığınız orijinal özelliklerle aynı özelliklere sahip yeni bir Openlayers.Geometry nesnesi içerecektir.

fromWKT işlevinden bir dizi fromWKT , oluşturulan tüm geometrileri içeren bir GeometryCollection döndürür.

 var geometryTexts = [ 'POINT(-104.74560546875 44.2841796875)' , 'POLYGON((-96.52783203125 44.6796875,-96.52783203125 45.734375,-92.22119140625 45.734375,-92.22119140625 44.6796875,-96.52783203125 44.6796875))' , 'LINESTRING(-105.71240234375 44.6796875,-106.06396484375 42.658203125,-103.55908203125 42.7021484375,-103.47119140625 45.55859375,-104.65771484375 45.20703125)' ], collection = OpenLayers.Geometry.fromWKT(geometryTexts); 

Bundan sonra, collection.toString() aşağıdakileri çıkarmalıdır:

GEOMETRYCOLLECTION (nokta (-104,74560546875 +44.2841796875), çokgen ((- - 96.52783203125 44.6796875, -96.52783203125 45,734375, -92.22119140625 45,734375, -92,22119140625,67,75,257,197,68775,257,197,68725,67). 96,52783203125 44,6796875)), LineString (-105,71240234375 44,6796875, -106,06396484375 +42,658203125, -103,55908203125 +42,7021484375, -103,47119140625 45,55859375, -104,65771484375 45,20703125))

29
04 марта '11 в 14:43 2011-03-04 14:43 Cevap Martijn 04 Mart '11 14:43 2011-03-04 14:43 tarihinde verilmiştir.

Diğer cevabımda WKT ile gittim, çünkü siz söylediniz. Şimdi anlıyorum ki GeoJSON'u tercih edersiniz.

Bir vektör katmanını veya bir Openlayers.Geometry nesnesini bir GeoJSON dizesine dönüştürmek için, OpenLayers.Format.GeoJSON.write öğesini kullanmanız gerekir:

 var geoJSON = new OpenLayers.Format.GeoJSON(), geoJSONText = geoJSON.write(geometryObject); 

Nesnenizi bu işleve geçirmeniz gerektiğini unutmayın, çünkü (belgelere göre) OpenLayers.Feature.Vector ve OpenLayers.Geometry veya bir işlev dizisini kabul eder.

border=0

Tersine, bir GeoJSON dizginiz olduğunda, OpenLayers.Format.GeoJSON.read işlevini kullanarak onu bir nesneye dönüştürebilirsiniz:

 var geometry = geoJSON.read(geoJSONText, 'Geometry'); 

İkinci parametre, döndürülen nesnenin türünü belirtmenize izin verir. Bunlarla ilgili belgelerde daha fazlasını okuyun.

Ayrıca bu demosu daha kapsamlı bir örnek için düşünün. (Nasıl yaptıklarını görmek için sayfanın kaynağını inceleyin).

17
04 марта '11 в 15:04 2011-03-04 15:04 Cevap Martijn 04 Mart '11 'de 15:04 2011-03-04 15:04

veya Soru Sor ile ilgili diğer sorular