Shapefile nedir ve hangi dosyalara ihtiyaç duyar?

Shapefile, Esri'nin 1990'ların başında geliştirdiği vektör bir CBS formatıdır. Aynı adı taşıyan bir dosya grubudur: .shp geometriyi, .shx bir dizini, .dbf de öznitelikleri tutar. .prj dosyası koordinat sistemini, .cpg dosyası metin kodlamasını belirtir. FileReshape ile bir shapefile'ı tarayıcınızda görüntüleyebilir ya da GeoJSON, KML veya GeoPackage'a dönüştürebilirsiniz; dosya sunucuya gönderilmez.

Shapefile nereden geliyor?

Esri, shapefile'ı 1990'ların başında masaüstü programı ArcView ile birlikte, noktaları, çizgileri ve poligonları bir öznitelik tablosuyla birlikte saklamanın basit bir yolu olarak tanıttı. 1998'de Esri, geometri ve dizin dosyalarının yapısını belgeleyen teknik bir doküman olan ESRI Shapefile Technical Description'ı yayımladı. Tanım herkese açık ve format basit olduğu için başka yazılımlar da onu lisans gerekmeden okuyup yazabildi ve shapefile, masaüstü CBS'nin ortak veri değişim formatı hâline geldi.

Bu, bugün de en büyük gücüdür. Kamu kurumlarının açık veri portalları, harita mühendisleri, planlama büroları ve altyapı kuruluşları shapefile yayımlar; çünkü QGIS ve ArcGIS Pro'dan GDAL'a, PostGIS veri yükleme araçlarına ve birçok CAD programına kadar neredeyse her CBS programı bu dosyaları okuyabilir. Ancak format yaşını da belli eder ve aşağıda anlatılan sınırlar, daha yeni formatların var olma nedenidir.

Shapefile'ı oluşturan dosyalar

Shapefile, parcels.shp, parcels.shx ve parcels.dbf gibi ortak bir temel adı paylaşan dosyalardan oluşan bir kümedir. Bunlardan üçü zorunludur. .shp dosyası her objenin geometrisini bir koordinat listesi olarak saklar. .shx dosyası, .shp içindeki her kaydın konumunu tutan bir dizindir; böylece programlar 5.000 numaralı objeye, öncesindeki her şeyi okumadan doğrudan atlayabilir. .dbf dosyası, dBASE formatındaki öznitelik tablosudur; her obje için bir satır içerir ve satırlar geometrilerle aynı sıradadır. Bir geometri ile satırı arasındaki bağ, bu sıradan başka bir şey değildir.

Diğer dosyalar isteğe bağlıdır. .prj dosyası koordinat sistemini, Esri'ye özgü WKT biçiminde tek satırlık bir metin (well-known text) olarak tutar. .cpg dosyası, .dbf'nin karakter kodlamasının adını (UTF-8 veya 1252 gibi) içeren küçücük bir metin dosyasıdır. .sbn ve .sbx dosyaları Esri yazılımlarının kullandığı bir mekânsal dizindir; .qix ise GDAL ve MapServer'ın yazdığı farklı bir mekânsal dizindir. İkisi de yalnızca büyük dosyalarda çizimi ve aramayı hızlandırır. .shp.xml dosyası açıklama, yazar ve tarih gibi meta verileri taşır. Öznitelik dizinleri için .atx dosyalarıyla da karşılaşabilirsiniz. İsteğe bağlı bir dosya eksikse programlar verileri yine okuyabilir; ancak .prj olmadan konum tahmine kalır, .cpg olmadan da özel karakterler bozulabilir.

Temel adlar, büyük-küçük harfe duyarlı sistemlerde harf büyüklüğü de dâhil olmak üzere tam olarak eşleşmelidir. Yalnızca roads.shp dosyasını streets.shp olarak yeniden adlandırmak kümeyi bozar. Tüm parçaları birlikte yeniden adlandırın, kopyalayın ve gönderin; onları bir arada tutmanın en kolay yolu, kümenin tamamını .zip yapmaktır.

Shapefile başına tek geometri tipi

Her shapefile başlığında tek bir geometri tipi bildirir ve her obje o tipte ya da boş olmalıdır. Ana tipler Point, MultiPoint, PolyLine (çizgiler) ve Polygon'dur; her biri düz bir 2B sürümle, yükseklik için Z değerli bir sürümle ve bir güzergâh boyunca mesafe gibi ölçüler için M değerli bir sürümle gelir. Az kullanılan MultiPatch tipi 3B yüzeyleri tanımlar. Bir dosya noktaları poligonlarla karıştıramaz; bu yüzden binaları ve girişlerini içeren bir veri seti iki ayrı shapefile olarak saklanmalıdır.

Poligonlar halkalar olarak saklanır. Yayımlanan tanıma göre dış sınır saat yönünde, delikler ise saat yönünün tersine ilerler; adaları olan bir ülke gibi birden fazla ayrı parçası olan bir poligon da birden fazla halkası olan tek bir objedir. Format topoloji saklamaz: komşu iki parsel ortak sınırlarını ayrı ayrı saklar ve dosyadaki hiçbir şey bu çizgilerin örtüştüğünü garanti etmez.

.dbf öznitelik tablosunun sınırları

Shapefile'ın tuhaflıklarının çoğu, 1980'lerden kalma dBASE tablo formatından gelir. Alan adları en fazla 10 karakter olabilir; bu yüzden Population_2020 gibi bir ad POP_2020 gibi bir şeye dönüşmek zorundadır ve bazı programlar adları ayrıca büyük harfe çevirir. Metin alanları en fazla 254 karakter tutar. Alan sayısı da sınırlıdır; genellikle verilen rakam 255'tir.

Veri tipleri azdır. Metin sabit genişlikli karakter alanlarında, sayılar sabit genişlik ve ondalık basamak sayısına sahip sayısal veya kayan noktalı alanlarda, doğru/yanlış değerleri mantıksal alanlarda, tarihler ise yıl, ay, gün biçimindeki tarih alanlarında saklanır. Günün saati ve saat dilimi yoktur; bu nedenle bir zaman damgası metin olarak saklanmalı ya da birkaç alana bölünmelidir. Gerçek bir null değeri de yoktur: boş bir sayı, programa göre genellikle boşluk ya da sıfır olarak yazılır ve bazı okuyucular değerin aslında bilinmediği yerde 0 gösterir. Liste, iç içe değer veya ikili (binary) alan yoktur.

Dosya boyutu sınırları

.shp ve .shx dosyalarının başlıkları ofsetleri ve uzunlukları 32 bitlik sayılar olarak saklar; bu da bir shapefile'ın her parçasının, özellikle .shp ve .dbf'nin, 2 GB'ın altında kalması gerektiği şeklindeki bilinen kurala yol açar. GDAL dâhil bazı programlar, istendiğinde yaklaşık 4 GB'a kadar dosyaları okuyup yazabilir; ancak başka yazılımlar bunları reddedebilir. Bundan büyük bir veri seti birkaç shapefile'a bölünmeli ya da başka bir formatta saklanmalıdır. Uygulamada sınıra genellikle önce .dbf ulaşır; çünkü her metin alanı, değerlerin çoğu kısa olsa bile her satırda tam genişliğini kaplar.

Metin kodlaması ve .cpg dosyası

.dbf formatı Unicode'dan eskidir. Metin bayt olarak saklanır ve başlıkta, çoğu zaman language driver ID (dil sürücüsü kimliği) olarak adlandırılan ve Windows-1252 gibi bir kod sayfasını ya da bir DOS kod sayfasını belirtebilen tek bir bayt bulunur. Birçok program bu baytı boş bırakır ya da yanlış ayarlar. .cpg dosyası, kodlamayı açıkça belirtmek için sonradan eklendi; modern yazılımlar UTF-8 yazar ve bunu belirten bir .cpg dosyası ekler.

Ne .cpg ne de başlıktaki bayt doğru olduğunda program tahmin yürütmek zorunda kalır ve Malmö, Ærø veya São Paulo gibi adlar (Türkçe veride Şişli, Iğdır veya Gümüşhane gibi adlar) anlamsız sembol dizilerine dönüşür. Bunu görüyorsanız veriler genellikle sağlamdır. Katmanı açarken CBS programınıza hangi kodlamayı kullanacağını söyleyin (örneğin QGIS'te katman özelliklerinde) ya da doğru adı içeren bir .cpg dosyası ekleyin. Shapefile'ları kendiniz yazarken UTF-8'i seçin ve .cpg dosyasını diğer parçalarla birlikte tutun.

Koordinat sistemleri ve .prj dosyası

.shp dosyası, ne anlama geldiklerini söylemeden yalnızca sayıları saklar. Bunlar derece cinsinden boylam ve enlem, bir UTM diliminde (Türkiye için UTM 35N–37N, EPSG:32635–32637) ya da TUREF TM dilimlerinde metre veya ABD'deki bir State Plane sisteminde fit olabilir. Programlara hangi koordinat referans sisteminin geçerli olduğunu yalnızca .prj dosyası söyler ve bunu bir EPSG kodu yerine WKT metni olarak yapar. Çoğu yazılım yaygın tanımları bir EPSG koduyla eşleştirebilir; ancak alışılmadık ya da elle düzenlenmiş .prj dosyaları bazen biraz farklı bir yorumlamaya yol açar.

.prj olmadan bir program WGS84 varsayabilir ya da size sorabilir. -180 ile 180 ve -90 ile 90 arasındaki değerler büyük olasılıkla derecedir; yüz binler veya milyonlar mertebesindeki büyük değerler ise projeksiyonlu metre ya da fittir. Bir koordinat sistemi atamak verileri yalnızca etiketler. Yeniden projeksiyonlama ise koordinatları gerçekten yeniden hesaplar ve bu ikisi birbirine karıştırılmamalıdır.

Shapefile'a alternatifler

GeoPackage, Open Geospatial Consortium'un açık bir standardıdır ve tek bir .gpkg dosyasındaki bir SQLite veritabanı üzerine kuruludur. Birden fazla katmanı, uzun alan adlarını, gerçek tarih ve saatleri, null değerleri ve büyük veri setlerini tutabilir; ayrıca QGIS'in varsayılan formatıdır. Bir projenin tamamını teslim etmek için iyi bir seçimdir. GeoJSON, RFC 7946 olarak standartlaştırılmış düz metin bir JSON formatıdır. Metin düzenleyicide kolayca okunur ve web haritaları ile API'ler için doğal formattır; ancak standart WGS84 koordinatları bekler ve dosyalar büyük olur. FlatGeobuf, yerleşik mekânsal dizine sahip, hızlı okuma ve web üzerinden akış için tasarlanmış daha yeni, tek dosyalı ikili bir formattır; desteği artıyor ama henüz diğerleri kadar yaygın değil.

Bunların hiçbiri her durum için doğru değildir. Alıcının hangi yazılımı kullandığını bilmediğinizde ya da bir sistem veya müşteri açıkça shapefile istediğinde, shapefile en güvenli seçim olmaya devam eder. Kesilen alan adları, kaybolan zaman damgaları veya 2 GB'a yaklaşan dosyalar gibi sınırları önünüze çıktığında GeoPackage'a dönüştürmek genellikle en zahmetsiz adımdır.

FileReshape ile shapefile'larla tarayıcınızda çalışın

FileReshape'in shapefile araçları parçaları web için derlenmiş GDAL ile okur; bu sayede dosyalar kendi cihazınızda işlenir ve sunucuya gönderilmez. Shapefile görüntüleyici, objeleri bir haritada ve öznitelik tablosunu her alanın tipiyle birlikte gösterir. Shapefile'dan GeoJSON'a, Shapefile'dan KML'ye ve Shapefile'dan GeoPackage'a dönüştürücüler aynı verileri bu formatlarda yazar; GeoJSON ve KML WGS84'te yazılır, GeoPackage ise koordinat sistemini korur. KML'den Shapefile'a dönüştürücü ters yönde çalışır ve geometri tipi başına bir shapefile olmak üzere .shp, .shx, .dbf, .prj ve .cpg dosyalarını içeren bir .zip yazar. Bir .zip bırakabilir ya da parçaları birlikte seçebilirsiniz; 10 karaktere kısaltılmış adları hiçbir dönüştürme geri getiremez.

Sıkça sorulan sorular

Hangi shapefile dosyaları zorunludur?

.shp, .shx ve .dbf dosyaları zorunludur. .prj ve .cpg dosyaları isteğe bağlıdır ama önerilir; .sbn, .sbx, .qix ve .shp.xml ise dışarıda bırakılabilecek dizinler ve meta verilerdir.

Bir shapefile noktaları, çizgileri ve poligonları bir arada içerebilir mi?

Hayır. Her shapefile'ın başlığında tek bir geometri tipi vardır. Karışık veriler her tip için ayrı bir shapefile'a bölünmeli ya da GeoPackage veya GeoJSON gibi bir formatta saklanmalıdır.

Shapefile'ım neden Türkçe karakterler yerine tuhaf işaretler gösteriyor?

Program .dbf dosyasını yanlış kodlamayla okumuştur. Katmanı açarken doğru kodlamayı seçin ya da UTF-8 veya 1252 gibi doğru adı içeren bir .cpg dosyası ekleyin.

Shapefile tarih ve saat saklayabilir mi?

Tarih saklayabilir ama günün saatini saklayamaz. Zaman damgaları genellikle bunun yerine metin alanlarında tutulur ya da veriler, gerçek bir tarih-saat tipine sahip GeoPackage'a taşınır.

Shapefile açık bir format mı?

Geometri ve dizin dosyaları, Esri'nin 1998'de yayımladığı teknik bir tanımda belgelenmiştir; öznitelik tablosu da yaygın olarak bilinen dBASE formatını kullanır. Bu nedenle birçok ücretsiz ve ticari program shapefile okuyup yazabilir.