GeoJSON, modern her web haritasının okuyabildiği JSON tabanlı formattır. Bir Leaflet haritasında polygon çizdiyseniz, MapLibre'de bir vektör katmanını stillediyseniz veya PostGIS'te bir servis alanı sakladıysanız, dosya uzantısı başka bir şey dese bile GeoJSON ile çalışıyordunuz.
Bu rehber, GeoJSON'un gerçekte ne olduğunu, geometri tiplerinin ne anlama geldiğini, gerçek sistemlerde nerelerde göründüğünü ve GeoJSON dosyaları geliştirici dizüstüsünden çıkıp üretime ulaştığında ekipleri ısıran tuzakları açıklar.
GeoJSON Gerçekte Nedir
GeoJSON, IETF tarafından 2016'da RFC 7946 olarak standartlaştırılmış, coğrafi veri yapılarını kodlamak için açık bir formattır. JSON'un katı bir alt kümesidir: her GeoJSON belgesi geçerli JSON'dur ama spec hangi anahtarlara izin verildiği, geometrinin nasıl yapılandırıldığı ve koordinatların nasıl sıralandığı hakkında kurallar ekler.
Format kasıtlı olarak küçüktür. Tüm spec'te yalnızca dokuz üst düzey nesne tipi vardır ve yetkin bir geliştirici hepsini kafasında tutabilir. Bu küçüklük, GeoJSON'un web haritacılığının lingua franca'sı haline gelmesinin nedenidir: okuması kolay, yazması kolay, doğrulaması kolaydır.
Koordinatlar her zaman [boylam, enlem] (üçüncü değer olarak opsiyonel rakım) olarak yazılır ve koordinat referans sistemi WGS84'e sabitlenmiştir; telefonunuzun GPS'inin kullandığı datum'un aynısı. Pazarlık yok, projeksiyon metaverisi yok, eksen sırası tartışması yok. Bir datum, bir sıralama, her yerde.
Geometri Tipleri
GeoJSON yedi geometri tipi tanımlar. İlk üçü ilkellerdir:
- Point: tek bir koordinat; pinler, adresler ve tek tek sensörler için kullanılır
- LineString: iki veya daha fazla koordinatın sıralı listesi; rotalar, yollar ve nehirler için kullanılır
- Polygon: koordinatların kapalı bir halkası (ilk ve son nokta aynı); binalar, parseller ve idari sınırlar için kullanılır
Sonraki üçü bu ilkellerin koleksiyonlarıdır:
- MultiPoint: tek bir geometri içinde birden fazla nokta; bir mağaza zincirini tek bir feature olarak temsil etmek için kullanışlıdır
- MultiLineString: birden fazla line string; parçalı rotalar veya nehir sistemleri için kullanılır
- MultiPolygon: birden fazla polygon; adaları olan herhangi bir ülke için doğru seçim (yani neredeyse hepsi)
Yedincisi, GeometryCollection, yukarıdakilerin herhangi bir karışımını tutabilir. Spec bunu önermez çünkü tüketicilerin çoğu onu kötü işler ve neredeyse hiçbir zaman ihtiyaç duymazsınız. GeometryCollection'a uzanıyorsanız, genellikle modelin bir FeatureCollection olmak istediğinin işaretidir.
Feature ve FeatureCollection
Geometri tek başına nadiren faydalıdır. Neyi temsil ettiğini bilmeniz gerekir. Feature'ın amacı budur: bir Feature, bir geometriyi keyfi metaveri tutan bir properties nesnesiyle sarar.
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [4.8952, 52.3702]
},
"properties": {
"name": "Amsterdam Centraal",
"type": "station",
"platforms": 15
}
}
Bir FeatureCollection Feature'ların bir listesidir. Vahşi doğada karşılaşacağınız neredeyse her gerçek GeoJSON dosyası bir FeatureCollection'dır çünkü gerçek veri kümelerinde birçok şey bulunur.
Kritik tasarım seçimi, properties'in açık olmasıdır. Spec, hangi anahtarları içerebileceği veya bu değerlerin hangi tiplerde olması gerektiği konusunda hiçbir şey söylemez. Bu bir hata değil, bir özelliktir: GeoJSON'un sokak mobilyası, seçim sınırları, teslimat bölgeleri ve AIS gemi izleri için formatı genişletmek zorunda kalmadan çalışmasını sağlar. Ayrıca tüketicilerin dikkatli olması gerektiği anlamına gelir: properties.population'ın varlığına bağlıysanız, bunu kendiniz doğrulayın çünkü RFC 7946 yapmaz.
GeoJSON Nerede Kullanılır
Bakmaya başladığınızda GeoJSON geospatial yığının her yerindedir:
- Harita kütüphaneleri: MapLibre GL, Mapbox GL, Leaflet ve OpenLayers, GeoJSON'u katmanlar için bir veri kaynağı olarak yerel olarak tüketir
- Vektör tile hatları: Tippecanoe gibi araçlar GeoJSON alır ve MVT (Mapbox Vector Tile) kümeleri üretir
- Harita stil spec'leri: MapLibre tarafından kullanılan Mapbox Style Specification, GeoJSON'a birinci sınıf bir kaynak tipi olarak başvurur
- Mekânsal veritabanları: PostGIS, BigQuery GIS ve Snowflake özel fonksiyonlar aracılığıyla GeoJSON'u içe ve dışa aktarır
- API çıktıları: modern geocoding, isochrone ve routing API'lerinin çoğu sonuçlar için GeoJSON Feature'ları döndürür, böylece yanıt doğrudan haritaya bırakılabilir
- Rota polyline'ları: navigasyon yanıtları render etmeye hazır rota için bir LineString geometrisi içerir
- Veri paylaşımı: açık veri portalları, OpenStreetMap dışa aktarımları ve devlet sınır yayınları web kullanıcılarını hedeflediklerinde varsayılan olarak GeoJSON'a geçer
Bir araç herhangi bir geospatial format konuşabiliyorsa, neredeyse kesinlikle GeoJSON konuşur.
Üretimdeki Tuzaklar
GeoJSON ilk gün affedicidir ve doksanıncı gün affedici değildir. Ekipleri yakalayan tuzaklar:
Önce boylam. RFC 7946 sırayı [lon, lat] olarak sabitler. İnsanlar, adresler ve dokümantasyonun çoğu lat, lon yazar. Onları takas etmek en yaygın GeoJSON hatasıdır ve noktanız yanlış okyanusta biter.
Polygon sarım yönü. RFC 7946, dış halkaların saat yönünün tersine ve iç halkaların (delikler) saat yönünde olması gerektiğini belirtir. Birçok eski GeoJSON dosyası bunu yok sayar. Bazı renderer'lar umursamaz, diğerleri (özellikle antimeridian'ı geçen polygon'lar olan Mapbox GL) polygon'u istediğinizin tersi olarak render eder: küçük bir ada, dünyanın geri kalanını kaplayan bir okyanusta delik haline gelir.
Antimeridian işleme. 180/-180 meridyenini geçen geometri spec'e göre bölünmelidir. Pasifik boyunca çizilen naif polygon'lar gezegenin uzun yolundan dolanan ince bir şerit olarak render edilir.
WGS84 ötesinde yerel CRS desteği yok. RFC 7946 eski crs üyesini kasıtlı olarak kaldırdı. Veriniz ulusal bir grid'deyse (British National Grid, RD New, EPSG:3857), serileştirmeden önce WGS84'e yeniden projeksiyon yapmalısınız. WGS84 olmayan GeoJSON yayan araçlar teknik olarak uyumsuzdur.
Dosya boyutu. Milyonlarca detaylı polygon içeren bir FeatureCollection gigabaytlara şişebilir. Tarayıcı teslimatı için vektör tile'lara geçin, geometriyi Douglas-Peucker ile basitleştirin veya newline-delimited GeoJSON (.ndjson) ile akış yapın.
Doğrulama. GeoJSONLint gibi bir linter veya CI'da geojson-validation kütüphanesini kullanın. Geçersiz sarım yönünü veya takas edilmiş koordinatları build sırasında yakalamak, bir müşteri ticket'ından yakalamaktan daha ucuzdur.
MapAtlas'ta GeoJSON
GeoJSON, MapAtlas platformunda varsayılan veri değişim formatıdır. Dynamic Maps ürünü, özel overlay'ler, stil ve etkileşimli katmanlar için GeoJSON kaynaklarını doğrudan kabul eder; ön işleme gerektirmez.
Geocoding API, eşleşen adresleri GeoJSON Feature'ları olarak döndürür; böylece bir forward geocode sonucu, alanları yeniden eşlemeden doğrudan bir haritaya bırakılabilir veya PostGIS'te saklanabilir. Isochrone API, seyahat süresi alanlarını GeoJSON polygon'ları olarak döndürür; bu, "15 dakikada ulaşılabilen yerler" sorgusunun tek bir fetch ve tek bir addSource çağrısı uzaklığında ekrana gelmesi anlamına gelir.
GeoJSON gösterişli değildir. Sabit bir koordinat sıralaması ve bir avuç geometri tipi olan, küçük ve görüş bildiren bir JSON alt kümesidir. Ama mekânsal veritabanından harita canvas'ına kadar modern bir konum yığınının her katmanının bir yerin ne olduğu konusunda anlaşmasını sağlayan formattır. Boylam sırasını doğru alın, sarımı doğrulayın ve yığının geri kalanı kendi kendine halletmeye eğilimlidir.
Sıkça Sorulan Sorular
GeoJSON nedir?
GeoJSON, IETF tarafından RFC 7946 olarak standartlaştırılmış, coğrafi verileri kodlamak için JSON tabanlı açık bir formattır. Küçük bir geometri tipi kümesi (Point, LineString, Polygon ve bunların multi varyantları) artı geometriyi keyfi özelliklerle saran Feature ve FeatureCollection nesneleri tanımlar. Koordinatlar her zaman WGS84 datum'unda boylam, enlem olarak yazılır; modern her web harita kütüphanesinin beklediği şey budur.
GeoJSON ile JSON arasındaki fark nedir?
GeoJSON, ek kurallarla JSON'un katı bir alt kümesidir. Her GeoJSON belgesi geçerli JSON'dur ama her JSON belgesi geçerli GeoJSON değildir. Spec, üst düzey nesne tiplerini, geometri nesnelerinin yapısını, koordinat sıralamasını (önce boylam) ve koordinat referans sistemini (WGS84) sabitler. Bu kuralların dışında kalan her şey, içinde tesadüfen coğrafi veri bulunan sıradan JSON'dur.
Shapefile veya KML yerine ne zaman GeoJSON kullanmalıyım?
Veri bir web yığınından geçmek zorunda olduğunda GeoJSON kullanın: API'ler, tarayıcılar, PostGIS gibi veritabanları veya MapLibre, Leaflet, Mapbox GL, OpenLayers gibi kütüphanelerden herhangi biri. Shapefile'lar masaüstü GIS'te hâlâ yaygındır ama dört veya daha fazla dosya halinde gelir ve 1990'lardan bir binary format kullanır. KML, Google Earth için iyidir ama uzun ve XML tabanlıdır. JSON API'lerine değen her şey için GeoJSON kazanır.
GeoJSON koordinatları neden önce boylam?
RFC 7946 sırayı boylam, enlem, opsiyonel rakım olarak sabitler. Bu, çoğu grafik ve GIS sisteminde kullanılan x, y, z konvansiyonuyla örtüşür. İnsanların koordinatları yazma şeklinin tersidir (önce enlem, 51.5, -0.1 gibi) ve elle GeoJSON yazarken en yaygın hata kaynağıdır: iki değeri takas edersiniz ve noktanız yanlış yarıkürede biter. GeoJSON'da her zaman önce boylam.

