İçindekiler:

OpenStreetMap Kullanarak Özel Stilize Haritalar Nasıl Oluşturulur: 7 Adım (Resimlerle)
OpenStreetMap Kullanarak Özel Stilize Haritalar Nasıl Oluşturulur: 7 Adım (Resimlerle)

Video: OpenStreetMap Kullanarak Özel Stilize Haritalar Nasıl Oluşturulur: 7 Adım (Resimlerle)

Video: OpenStreetMap Kullanarak Özel Stilize Haritalar Nasıl Oluşturulur: 7 Adım (Resimlerle)
Video: Zero to Hero ControlNet Tutorial: Stable Diffusion Web UI Extension | Complete Feature Guide 2024, Temmuz
Anonim
OpenStreetMap Kullanarak Özel Stilize Haritalar Nasıl Oluşturulur
OpenStreetMap Kullanarak Özel Stilize Haritalar Nasıl Oluşturulur

Bu talimatta, kendi özel yapım stilize haritalarınızı oluşturabileceğiniz bir süreci anlatacağım. Stilize edilmiş bir harita, kullanıcının hangi veri katmanlarının görselleştirileceğini belirleyebildiği ve ayrıca her katmanın görselleştirileceği stili tanımlayabildiği bir haritadır. Önce haritaları stilize etmek için yazılım yazabileceğiniz süreci anlatacağım, ardından bu görevi gerçekleştirmek için yazdığım Python yazılımından bir örnek vereceğim.

Aşağıdaki video, kişisel olarak nasıl stilize edilmiş haritalar oluşturduğumu vurguluyor, ancak samimi ayrıntılar için okumaya devam edin. Topluluğun neler yarattığını görmek beni çok heyecanlandırıyor!

Bu projenin arkasındaki motivasyonum nedir?

Açıkçası bu projeye eğlenceli olacağını düşündüğüm için başladım. Bu fikir son bir yıldır kafamda dönüp duruyor ve sonunda onu hayata geçirmek için gereken zamanı ayırdım. Bazı temel komut dosyalarıyla prototiplemeyle geçen bir günün ardından, son derece umut verici sonuçlar elde edebildim - o kadar umut vericiydi ki, başkalarının kolayca kendi eserlerini yaratabilecekleri şekilde komut dosyalarımı resmileştirmem gerektiğini biliyordum.

Bu talimatı yazmamdaki motivasyonum, kendi stilize haritalarınızı sıfırdan nasıl oluşturacağınız konusunda çok az bilgi bulmuş olmamdan kaynaklanıyor. Öğrendiklerimi toplumla paylaşmayı umuyorum.

Kaynaklar/Bağlantılar:

  • OpenStreetMap
  • OpenStreetMap Hukuk Dili
  • Github Deposu

Gereçler

  • Bir Python dağıtımı (Anaconda ve Python 3.6 kullandım)
  • PyQt5 (GUI bağımlılıkları için)

Adım 1: İşlemi Tanımlama I: OSM Dosyasını İndirme

İşlemi Tanımlama I: OSM Dosyasını İndirme
İşlemi Tanımlama I: OSM Dosyasını İndirme

Bu projeye ilk başladığımda en göze batan soru "harita verilerini nereden alabilirim" idi. Doğal olarak, beklediğiniz gibi, aklıma hemen Google Haritalar geldi. Önemli bir araştırmadan sonra, Google'ın yaratıcı anlamda veya başka bir şekilde insanların verileriyle oynamasını gerçekten istemediğini keşfettim. Aslında, Google Haritalar'dan web kazımasına açıkça izin vermezler.

Neyse ki, OpenStreetMap'i (OSM) keşfettiğimde umutsuzluğum kısa sürdü. OSM, dünyanın her yerinden verilere katkıda bulunan insanları içeren ortak bir projedir. OSM, verilerinin Açık Kaynak yazılımı adına açık uçlu kullanımına açıkça izin verir. Bu nedenle, OSM web sayfasını ziyaret etmek, harita stilizasyon yolculuğunun başladığı yerdir.

OSM web sitesine geldikten sonra, harita dışa aktarma araçlarını göstermek için "Dışa Aktar" sekmesine tıklayın. Şimdi, harita verilerini toplamakla ilgilendiğiniz bölgeyi görüntülemek için yakınlaştırın. Ekranınızda bir kutu açacak olan "Manuel olarak farklı bir alan seç" bağlantısını seçin. Bu kutuyu şekillendirin ve ilgilendiğiniz bölgenin üzerine yerleştirin. Memnun kaldığınızda, OSM veri dosyanızı indirmek için "Dışa Aktar" düğmesine tıklayın.

Not 1: Seçtiğiniz bölge çok fazla veri içeriyorsa, çok fazla düğüm seçtiğinizi belirten bir hata alırsınız. Bu size olursa, daha büyük dosyanızı indirmek için "Overpass API" düğmesini tıklayın.

Not #2: İndirdiğiniz OSM dosyanız 30MB'den büyükse yazdığım Python programı gözle görülür şekilde yavaşlayacaktır. Büyük bir bölge kullanmaya kararlıysanız, çizmeyi planlamadığınız gereksiz verileri atmak için bir komut dosyası yazmayı düşünün.

Adım 2: Sürecin Tanımlanması II: Verilerin Anlaşılması

Süreci Tanımlamak II: Verileri Anlamak
Süreci Tanımlamak II: Verileri Anlamak
Süreci Tanımlamak II: Verileri Anlamak
Süreci Tanımlamak II: Verileri Anlamak
Süreci Tanımlamak II: Verileri Anlamak
Süreci Tanımlamak II: Verileri Anlamak
Süreci Tanımlamak II: Verileri Anlamak
Süreci Tanımlamak II: Verileri Anlamak

"Verilere sahibim…şimdi ne olacak?"

İndirdiğiniz OSM dosyanızı favori metin düzenleme yazılımınıza açarak başlayın. İlk önce bunun harika bir XML dosyası olduğunu fark edeceksiniz! XML ayrıştırmak için yeterince kolaydır. Dosyanızın başlangıcı, bu adımın ilk resmiyle neredeyse aynı görünmelidir - bazı temel meta veriler ve coğrafi sınırlar listelenecektir.

Dosyayı kaydırırken, baştan sona kullanılan üç veri öğesini fark edeceksiniz:

  1. düğümler
  2. yollar
  3. ilişkiler

En temel veri öğesi olan bir düğüm, kendisiyle ilişkilendirilmiş benzersiz bir tanımlayıcıya, enlem ve boylamlara sahiptir. Tabii ki, ek meta veriler var, ancak güvenle atabiliriz.

Yollar, düğümlerin koleksiyonlarıdır. Bir yol, kapalı bir şekil veya açık uçlu bir çizgi olarak oluşturulabilir. Yollar, benzersiz tanımlayıcıları tarafından tanımlanan bir düğümler koleksiyonundan oluşur. Ait oldukları veri grubunu tanımlayan anahtarlarla etiketlenirler. Örneğin, yukarıdaki üçüncü resimde gösterilen yol "yer" veri grubuna ve onun alt grubu olan "ada"ya aittir. Başka bir deyişle, bu özel yol, "yer" grubu altındaki "ada" katmanına aittir. Yolların ayrıca benzersiz tanımlayıcıları vardır.

Son olarak, ilişkiler yolların toplamıdır. Bir ilişki, delikli veya birden çok bölgeli karmaşık bir şekli temsil edebilir. İlişkilerin de benzersiz bir tanımlayıcısı olacak ve yollara benzer şekilde etiketlenecektir.

OSM wiki'den bu veri öğeleri hakkında daha fazla bilgi edinebilirsiniz:

  • düğümler
  • yollar
  • ilişkiler

Adım 3: Sürecin Tanımlanması III: Verilerin Özetlenmesi

Sürecin Tanımlanması III: Verilerin Özetlenmesi
Sürecin Tanımlanması III: Verilerin Özetlenmesi

Şimdi, bir OSM dosyasını oluşturan veri öğeleri hakkında en azından yüzeysel bir anlayışa sahip olmalısınız. Bu noktada, tercih ettiğiniz dili kullanarak OSM verilerini okumakla ilgileniyoruz. Bu adım Python merkezli olsa da, Python kullanmak istemiyorsanız, yine de birkaç ipucu ve püf noktası içerdiğinden bu bölümü okumalısınız.

xml paketi, çoğu standart Python dağıtımında varsayılan olarak bulunur. Bu paketi ilk resimde gösterildiği gibi OSM dosyamızı çok kolay bir şekilde ayrıştırmak için kullanacağız. Tek bir for döngüsünde, her bir belirli veri öğesi için OSM verilerinin işlenmesini işleyebilirsiniz.

Resmin son satırında, 'sınırlar' etiketini kontrol ettiğimi fark edeceksiniz. Bu adım, enlem ve boylam değerlerinin ekrandaki piksellere dönüştürülmesinde hayati derecede önemlidir. Verilerin toplu olarak dönüştürülmesi yoğun bir işlem olduğundan, OSM dosyasını yüklediğiniz sırada bu dönüştürmeyi çalıştırmanızı şiddetle tavsiye ederim.

Enlem ve boylamları ekran koordinatlarına dönüştürmekten bahsetmişken, işte yazdığım hesaplama işlevine bir bağlantı. Enlemi ekran koordinatlarına dönüştürürken muhtemelen biraz garip bir şey fark edeceksiniz. Boylamla karşılaştırıldığında fazladan bir adım var! Görünen o ki, OSM verileri Sözde Mercator projeksiyon yöntemi kullanılarak modellenmiştir. Neyse ki, OSM'nin burada bu konuyla ilgili harika belgeleri var ve bunlar önemli sayıda dil için enlem dönüştürme işlevlerini sağlıyor. Mükemmel!

Not: Kodumda, ekran koordinatı (0, 0) ekranın sol üst köşesidir.

Adım 4: Python Haritası Stilleyici Uygulaması

Python Harita Stilleyici Uygulaması
Python Harita Stilleyici Uygulaması
Python Harita Stilleyici Uygulaması
Python Harita Stilleyici Uygulaması
Python Harita Stilleyici Uygulaması
Python Harita Stilleyici Uygulaması

Bu noktaya kadar OSM veri dosyasının ne olduğundan, nasıl okunacağından ve onunla ne yapılacağından bahsettim. Şimdi, stilistik harita görselleştirmesiyle (GitHub deposu girişte sağlanan) başa çıkmak için yazdığım yazılımı tartışacağım.

Özel uygulamam, işleme hattının kullanıcı kontrolüne odaklanıyor. Özellikle, kullanıcının görünmesini istediği katmanları ve bu katmanın nasıl görselleştirilmesini istediğini seçmesine izin veriyorum. Daha önce kısaca bahsettiğim gibi, oluşturulan iki öğe sınıfı vardır: dolgu öğeleri ve satır öğeleri. Dolgular yalnızca bir renkle tanımlanırken çizgiler renk, çizgi genişliği, çizgi stili, çizgi başlık stili ve çizgi birleştirme stili ile tanımlanır.

Kullanıcı katman stilleri ve görünürlükte değişiklikler yaptığında, değişiklikler sağdaki harita widget'ına yansıtılır. Bir kullanıcı, haritanın görünümünü tatmin edecek şekilde değiştirdikten sonra, maksimum harita boyutunu ayarlayabilir ve haritayı bilgisayarına bir resim olarak kaydedebilir. Bir görüntüyü kaydederken, bir kullanıcı yapılandırma dosyası da kaydedilir. Bu, kullanıcının herhangi bir zamanda belirli bir görüntü oluşturmak için kullandığı yapılandırmayı geri çağırabilmesini ve yeniden kullanabilmesini sağlar.

Adım 5: Uygulama Dezavantajı + Çözüm

Uygulama Dezavantajı + Çözüm
Uygulama Dezavantajı + Çözüm
Uygulama Dezavantajı + Çözüm
Uygulama Dezavantajı + Çözüm

Bir haritayı elle stilize etmeye ilk başladığımda, bunun oldukça sıkıcı bir süreç olduğunu öğrendim. Kullanıcıya maksimum kontrol sağlamak, çok sayıda mevcut "düğme" nedeniyle basitçe bunaltıcı olabilir. Ancak, biraz fazladan komut dosyası oluşturmayı içeren basit bir çözüm var.

Özellikle hangi katmanlarla ilgilendiğimi belirleyerek başladım. Bu öğreticinin amacı doğrultusunda, diyelim ki en çok binalar (hepsi), nehirler, ana otoyollar ve yüzey sokakları ile ilgileniyorum. Bir Yapılandırma örneği oluşturduğum, setItemState() işlevini ve tanımlanmış sabitleri kullanarak katman durumlarını uygun şekilde değiştirdiğim ve setValue() kullanarak katmanlarımın nasıl görünmesini istediğime bağlı olarak renkleri ayarladığım bir komut dosyası yazardım. Kaydedilen sonuçtaki yapılandırma dosyası, yapılandırma klasörüne kopyalanabilir ve kullanıcı tarafından yüklenebilir.

Örnek bir komut dosyası yukarıdaki resimdedir. İkinci resim, yardımcı fonksiyonların nasıl görüneceğinin bir örneğidir ve temelde hepsi aynı olduğundan, sadece değişen sabitlerle, sadece bir örneğin resmini ekledim.

Adım 6: İyileştirme Alanları

İyileştirme Alanları
İyileştirme Alanları

Yazılım uygulamamı düşündükten sonra, uzman kullanıcılar için yararlı iyileştirmeler olabilecek birkaç alan belirledim.

  1. Dinamik katman oluşturma. Şu anda, işlenecek önceden tanımlanmış bir katman listem var, hepsi bu. Gerekçenin bir kısmı, bir katmanın çizgi mi yoksa dolgu mu olacağını belirlemenin zorluğuydu. Sonuç olarak, açtığınız hemen hemen her OSM dosyasında, oluşturulmayacak katmanlar hakkında bir dizi uyarı ile karşılaşacaksınız. Bunlar genellikle o kadar azdır ki sorun olmaz, ancak kritik katmanların eksik olması kaçınılmazdır. Dinamik katman oluşturma bu endişeleri ortadan kaldıracaktır.
  2. Dinamik katman ataması. Bu, #1 ile el ele gider; dinamik katman oluşturma istiyorsanız, dinamik katman atamasına ihtiyacınız vardır (yani, bir çizgi katmanına karşı bir dolgu katmanı tanımlama). Bu, öğrendiğim gibi makul bir şekilde başarılabilir, çünkü ilk ve son düğümü aynı olan Yollar, kapalı yollar olacak ve bu nedenle doldurulacaktır.
  3. Renk Grupları. Stilize edilmiş bir harita genellikle aynı stile sahip birkaç katmana sahiptir ve kullanıcının bir grubun stilini aynı anda değiştirmesini sağlamak, kullanıcının katmanları tek tek düzenlemek için harcadığı zamanı büyük ölçüde azaltır.

Adım 7: Düşünceleri Kapatmak

Kapanış Düşünceleri
Kapanış Düşünceleri
Kapanış Düşünceleri
Kapanış Düşünceleri
Kapanış Düşünceleri
Kapanış Düşünceleri

Eğitilebilirliğimi okumak için zaman ayırdığınız için herkese teşekkür ederim. Bu proje, saatlerce süren araştırma, tasarım, programlama ve hata ayıklamanın doruk noktasını temsil ediyor. Umarım kendi projenizi oluşturabileceğiniz veya daha önce yazdıklarımın üzerine inşa edebileceğiniz bir fırlatma rampası sağlayabilmişimdir. Umarım eksikliklerim ve ipuçlarım tasarımınızda dikkate almanız gereken birçok nokta sağlar. Programlamaya daha az, sanat eseri yaratmaya daha yatkınsanız, yorumlarda ne yaptığınızı görmek isterim! İmkanlar sonsuzdur!

OpenStreetMap katkıda bulunanlara özel teşekkürler! Bu tür projeler, onların önemli çabaları olmadan mümkün olmazdı.

Yorumlarda herhangi bir sorunuz varsa lütfen bana bildirin!

Haritalar Mücadelesi
Haritalar Mücadelesi
Haritalar Mücadelesi
Haritalar Mücadelesi

Haritalar Yarışmasında İkincilik

Önerilen: