Küçük bir web haritalama / harita döşeme hizmeti oluşturma


26

Çevrimiçi olarak bir veya daha fazla çokgen şekil dosyasını sunmak için küçük çaplı ve kolay bir yol arıyorum (mevcut bir harita sunucusu altyapısı olmayan bir belediye web sitesinde, kesin olarak). Şu anda QGIS ile tüm çalışmaları yapıyorum ve tüm açık kaynaklı kalmayı tercih ederim (büyük yazılım yatırımları için bütçe kalmadı).

Bu konuyu araştırmak çok sayıda olası yaklaşımla sonuçlandı ve beni oldukça şaşırttı. Aradığım şey

  • kategorize edilmiş çokgenleri tematik bir haritada gösterebilme (- mümkünse, pop-up'ları almak veya özellik bilgilerini almak güzel olurdu - ama bu çok isteğe bağlı)
  • QGIS'te çoğu işi (stil, vb.) Yapmayı tercih ederim.
  • Temel harita olarak OSM mükemmel derecede iyi olurdu

Şimdiye kadar, bir OSM temel haritasındaki özel harita döşemeleri, aradığım şeye benziyor mu (veya daha iyi bir çözüm var mı)? Bu çinileri yaratmanın en iyi yolu ne olabilir?


2
Raster tabanlı (Web döşemeleri) bir çözüm mü olmalı? Bir vektör çözümü için uygun olur mu?
Mapperz

Hayır, hiç de değil. En kolay yol olacağını düşündüm (fayans oluştur, index.htm oluştur ya da mevcut web sayfasına yapıştırmak için kod bloğu oluştur, sunucu dizinine kopyala, bitti). GMapCreator ile daha önce özel bir projede çalıştım ve işleri halletmek için çok hızlı bir yoluydu.
SAnderka

Şekil dosyalarınızda kaç tane çokgen var? 1000'in altında ise, belki @ Mapperz'ın vektörel bir çözüme yorum yapması yoludur. En basit çözüm, çokgen çizmek ve bilgi açılır pencereleri oluşturmak için Google Haritalar API'sini kullanmaktır - etkileşimli olmayan döşenmiş görüntüler oluşturmaya ve depolamaya gerek yoktur. Bir haritanın döşenmiş görüntüleri, uydu görüntülerini, yolları veya nüfus sayımı sınırlarını göstermek gibi çok yoğun bilgiler için en iyisidir.
b_dev

Yanıtlar:


13

Bunu QGIS ile başlayan basit bir yol için , normal QGIS arayüzünü kullanarak tasarladığınız haritaları sunabilen QGIS Mapserver kullanabilirsiniz . Alternatif olarak , Java tabanlı ve kurulumu muhtemelen daha kolay olan GeoServer ile gitmek isteyebilirsiniz . Her iki program da bir taneyle başlarsanız ve daha sonra geçmeniz gerekiyorsa açık standartları kullanarak haritalar sunduğundan, istemciyi değiştirmenize gerek yoktur.

WMS haritalarını sunmak için kurulmuş bir sisteminiz olduğunda, bir müşterinin ön ucunu isteyeceksiniz. OpenLayers'ı tavsiye ediyorum , çünkü başlamak çok kolay ve kolayca genişletilebilir. WMS, WMST ve OSM fayanslarını sorunsuzca işler.

Nihayet, WMS katmanlarınız için döşemelere gitmeniz gerekebilir (makul donanımda dakikada 50-100 istekten daha fazlasını almaya başladığınızı söyleyin). Daha sonra harita sunucusunun önüne bir döşeme önbelleği koymak isteyebilirsiniz. GeoServer'ı kullandıysanız, yerleşik GeoWebCache'yi veya TileCache'i kullanabilirsiniz .


Benim sorunum şu anda belediye yönetimi içinde serbest danışman olarak çalışıyorum. Yerel BT personeli oldukça kalın kafalı ve her türlü "şüpheli" açık kaynak kaynağını makinelerinde tutmaya çalışıyor (QGIS için uzun uzun bir savaştım). Bu nedenle, belediyenin internet sitesinde bir "yazılım" olarak kurulması gereken herhangi bir çözümden kaçınmak istiyorum.
SAnderka

Hayallerimdeki çözüm kendi başıma hazırlayabileceğim ve sadece web sitesine kopyalayabildiğim, html / JS kodunu ekleyebileceğim ve yapabileceğim bir şey olurdu. Raster mi yoksa vektör verisinin mi olduğu gerçekten sayılmaz. Zaten teknik farkı anlayan tek kişi benim ... Ve herkesin umursadığı şey, verilerimizin vatandaşlarımız için güzel ve kolay bir şekilde sunulması.
SAnderka

1
sadece onlara web haritalamanın yazılım olmadan kolayca yapabileceğiniz bir şey olmadığını açıklamanız gerekir. Bir web sunucusuna bazı basit döşemeler atabileceğinizden emin olabilirsiniz, ancak tüm ölçeklerde iyi görünmez, belediye başkanının daha fazlasını istediği zaman özellik eklemek zor ve zordur.
Ian Turton

Bu yüzden Geoserver'a baktım (Open Geo Suite paketinin bir parçası olarak) ve oldukça iyi görünüyor. Şekil dosyamı içeri aktardım, stillendirdim, hatta localhost'ta çalışan önizlemesini bile aldım. Ancak bu haritaları web sitemde nasıl çevrimiçi bulabilirim? Bir şey mi eksik? Yerel sabit diskime atıfta bulundukları için yer işaretleri vb. Kesinlikle çalışmaz. Mümkün olan tüm öğreticiler ve nasıl yapılır dersleri boyunca elimden geldiğince çalıştım, ama bu konu hiç tartışılmamış gibi görünüyor? Birisi beni doğru yöne işaret edebilir mi?
SAnderka

GeoServer'ı web sunucunuza koyar ve veri dizinini yerel makinenizden uzaktaki makineye kopyalarsınız.
Ian Turton

8

kategorize edilmiş çokgenleri tematik bir haritada gösterebilme (- mümkünse, pop-up'ları almak veya özellik bilgilerini almak güzel olurdu - ama bu çok isteğe bağlı)

QGIS'te çoğu işi (stil, vb.) Yapmayı tercih ederim.

Temel harita olarak OSM mükemmel derecede iyi olurdu

Bütün bunlar QGIS ve ogr2layerseklenti içinde yapılabilir . İş akışı basittir:

  1. Verilerinizi QGIS'te stillendirin. Eklentiyi New Symbologykullanırken sorun yaşadığım gibi eski sembolojiyi kullanın ogr2layers.

  2. ogr2layersEklentiyi başlatın ve açılış katmanları ayarlarını tanımlayın (harita boyutu, harita kontrolleri, temel harita vb.). Bu, index.htmlve geojsondosyalarınızı dönüştürülmüş veri katmanlarınızı içeren bir dizin oluşturur .

  3. Dizini web sunucusuna yükleyin.

Bunun sadece basit web haritaları için olduğunu unutmayın. Özel temel haritalar ve diğer web haritalama özellikleri oluşturmak için, iant ve Peter'ın yanıtlarını inceleyin.


1
Basit web haritası, hala yakınlaştırılabilir ve kaydırılabilir olduğunu gösterir, tamam mı? Ofisime döndüğümde dikkat etmem gereken bir şey gibi görünüyor.
SAnderka


6

Diğer bir seçenek ise TileMill - Cascadenik adlı proto-CSS dilinde stil tanımları dahil, kullanımı kolay web tabanlı bir arayüzde döşeme, etkileşimi ve haritacılığı destekliyor . TileMill'i kullanarak, TileStream gibi bir şeyle tüketilebilen mbtiles dosyalarını çıkarabilirsiniz . Bununla birlikte, haritalanmış çıktıların konuşlandırılmasıyla ilgili bazı püf noktaları var, ancak bu size yüksek kaliteli fayans üretmek için güzel bir platform sağlayacaktır.


Demo videolarını ön sayfada izleyin, çok etkileyici!
joshdoe

6

Çinili harita hizmetim için nihayet hangi yöne gittiğime dair bazı bilgiler vermeye karar verdim. Saf JavaScript ve GeoJSON'lar bir çözüm değildi, çünkü kabaca 40k poligon ve 33k puan almam gerekiyor. Bu yüzden döşemeye gittim. Oh, ve hala kök sunucuya erişimim yok, bu yüzden GeoServer veya benzeri bir şey ayarlayamıyorum (şu anda tek bir müşteri için finansal olarak mümkün olmaz)

Biraz araştırma ve okumadan sonra nihayet OpenLayers ile yerleştim (bazıları GMaps ile görücüye çıktıktan sonra). Eric Hazzard'ın harika kitabı "OpenLayers 2.10" (Packt Publishing, 2011) gerçekten çok yardımcı oldu, çünkü bazı JavaScript temellerini ve hata ayıklama ipuçlarını da içeriyor.

Tüm vektör verilerimi QGIS’te yaptım, elbette, bu kesinlikle benim gibi küçük bir freelancerı izlemenin yolu (üniversiteden biraz ArcGIS’i de biliyorum ama QGIS şu ana kadar ihtiyacım olan her şeyi teklif ediyor).

Haritayı şekillendirmek ve döşemeleri oluşturmak daha büyük bir zorluktu. İlk önce CASA tarafından " GMapCreator " ile birlikte gittim , ancak birden fazla şekil dosyası katmanlamak sıkıcı oldu (çokgenler üzerinde nokta verileri sağlamalıyım, sonra her şeyi içine alan bir belediye sınır çizgisi sağlamalıyım). Bunu GMapsCreator'da yapmak kesinlikle mümkün (ve bunu vitrin aşaması için yaptım), ancak 3 tam işleme döngüsü gerekiyor (ilk önce fayans oluşturuyorsunuz, ardından mevcut fayanslar daha sonra özelliklerle "fazla büyütülmüş" oluyor - doğru sıraya göre sıralanıyor önemlidir!) ve stil menüleri biraz hantal ve kafa karıştırıcı. Haritanızı kaydetmek ve daha sonra düzenlemek de karmaşık bir konudur.

TileMill çok umut verici görünüyordu, özellikle de CSS'ye benzeyen stilleri. Ne yazık ki, bu yalnızca Mac veya Linux'tur, bu yüzden bazı insanları korkutabilir. Gördüklerimi gerçekten çok beğendim, bu yüzden sabit diskime bir Ubuntu bölümü oluşturdum, indirdim ve haritalarım oldu. Biçimlendirme sözdizimi ile ilgili belgeler bazen biraz azdır, ancak demo videolarını izlemek (ana siteye bağlı) hemen hemen her şeyi yanıtlar. İç içe geçmiş ve / veya koşullu stillerle bazı ilginç şeyler yapmak mümkündür ve bazı temel CSS anlayışları sizi gitmek istediğiniz yere götürmelidir.

Sonunda, TileMill hoş, tek bir * .mbtiles dosyası oluşturur. Bunları doğrudan OpenLayers'da göstermenin bir yolu olduğunu sanmıyorum (en azından bir tane bulamadım mı?), Bu yüzden başka bir araç kullanmanın zamanı gelmişti : mbutil . Bu araç, mbtiles-Dosyasını, seçili yakınlaştırma seviyelerindeki verilerimin döşenmiş pn'lerini içeren normal bir klasör yapısına yerleştirir.

Sonunda, tüm bu dosyaları FTP-Sunucuma yükledim, web haritamı yukarı ve yukarı çekmek için OL üzerinde yoğun bir okuma yaptım (oluşturulan döşemeleri bir TMS katmanı olarak eklediniz, ancak doğru kaynak url ve katman adının tahmin edilmesi biraz zaman aldı ve googling) ve sonra temel html / CSS sorunları ile uğraşarak birkaç saat yandı. Müşterilerimin "kurumsal" (bahsettiğim belediye) kimlik kurallarını takip eden değişken bir efsane ile% 100 genişlik / yükseklik haritası istedim.

Ah, ve şimdiye kadar Google Haritalar’ı temel katmanlar olarak kullanıyorum, ancak yakında WMS aracılığıyla sunulan bazı özel hava fotoğrafları (bana sağlanmadı, ancak devletin anketi ve coğrafi veri yönetimi) kullanılabiliyor.

Umarım önemli bir şeyi unutmadım, ama eğer öyleyse, lütfen sormaya çekinmeyin! Bu konuyu ara sıra kontrol edeceğim.


Tilemill artık Windows için de mevcut. Ayrıca Openlayers Users posta listesinde , mbtiles'i bir veri kaynağı olarak kullanmaya ilişkin nispeten yeni bir konu var (denemedim).
matt wilkie

Ah, teşekkürler, bilmek güzel. Bunu kesinlikle denemek zorunda kaldık, win7 ve ubuntu arasında her zaman geçiş yapmak biraz can sıkıcı oldu.
SAnderka

3

Eğer 1000 poligonun altındaysanız, @ Mapperz'in bir vektör çözümü hakkındaki yorumunu düşünün; sadece birkaç poligonunuz varsa etkileşimli olmayan döşenmiş görüntüler oluşturmanıza ve saklamanıza gerek yok .

Döşenmiş görüntüler, uydu görüntülerini, yolları veya 50.000 nüfus sayımı kanal poligonlarını göstermek gibi çok yoğun bilgiler için en uygunudur.

Az sayıda çokgen için en basit çözüm, şekil dosyasını bir KML'ye dönüştürüp Google Haritalarım'a yüklemektir.

Javascript’i kodlarsanız, en etkileşimli çözüm, çokgen çizmek ve bilgi açılır pencereleri oluşturmak için Google Haritalar API’sıdır (veya OpenLayers). GDAL kütüphanesini kullanarak, şekil dosyası çokgenlerini bir geoJSON dosyasına (coğrafi bilgileri kaydetmenin Javascript yolu) dönüştürerek başlayabilirsiniz.

Ya da kiremit rotasına gitmişseniz, kiremitleri Amazonlar'da veya Google'ın bulutunda herhangi bir sorun yaşamadan saklayabilirsiniz.

Bu Tematik Haritalama blog girişi , vektör yaklaşımının düşündüğünüz fayans yaklaşımı üzerindeki avantajlarının güzel bir özetini sunar.

İyi şanslar!


Tek bir görünümde vektör olarak ele alınan yaklaşık 500 noktanın işleri sürtünmeye yavaşlatma eğiliminde olduğunu buldum. Her şeyi 500 noktaya döşiyoruz.
Michalis Avraam,

1

Aynı sonuca varmak için yavaşça çalıştığım için dostum için hissediyorum. QGIS'i öğrendikten sonra quantamnik ve mapnik denedim. Ancak qgis stilini tek yönlü bir gezi olacak ve şekillendirme sistemleri 1 için 1 olmadığından, yine de mapnik stilini öğrenmelisiniz. Aynı durumun qgis mapserver export işlevi için de geçerli olduğunu tahmin ediyorum. Haritacıyı üzmek için "kolay bir yol" gibi görünmüyor, sadece çapalayın ve çok zaman verin.

Mapnik, geoserver, mapserver, her birinin adanmışı görünüyor ama mapserver orta yol gibi gözüküyor.

Bulduğum bir kısayol olduğunu ve bunun qgis olduğunu söyledikten sonra, bir qgis haritasını seçtiğiniz çözünürlük ve sınırlara göre rasterleştirmek için bir komut satırı seçeneğine sahip ve bir dünya dosyası yaratıyor. Bununla bir seferde bir kat döşemek için maptiler veya gdal2tiles kullanabilirsiniz. Açıkçası 20 zoom seviyesi için iyi olmaz, ne de maksimum png boyut limitinin ne olduğunu bilmiyorum.


2
QGIS MapServer, MapServer'dan farklıdır.
Ian Turton

2
Bu karışıklık potansiyeli nedeniyle, QGIS Sunucusu olarak adlandırılmalıdır.
underdark
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.