MySQL nokta veri tiplerini LAT LNG veya LNG LAT olarak depolar mı?


9

Konum biçimini enlem ve ardından boylam olarak görmeye alışkınım, ancak kütüphaneleri kullanarak POINT(LNG LAT), ters sipariş olarak saklamak için MySQL anladığımı düşünüyorum . Kütüphanem yanlış mı yoksa gerçek format mı? Bu ayrıntıyı MySQL belgelerinde bulamıyorum.


Muhtemelen bunu bir okuma yapabilirsiniz: stackoverflow.com/questions/159255/…
codedawg82

Yanıtlar:


14

Yapıcı Sözdizimi

Aranıyor mekansal işlev başvurusu, göreceksiniz

Point(x, y)
Constructs a Point using its coordinates

Bu tamamen doğru değil. Tüm CBS uygulamaları (x,y)öngörülen koordinatlar için yapılmalıdır (long,lat). Ancak, jeodidik kordinat sistemlerinde ne yapılacağı konusunda bazı anlaşmazlıklar vardır. MySQL (ve SQL Server) bunu yapar (lat,long)ancak PostGIS (long,lat)her yerde korur .

Bu İçeri dokunulduğunda Spec Coğrafi Bilgi OpenGIS® Uygulama Standardı - Basit özellik erişimi - Bölüm 2: SQL seçeneği ,

  • Elipsoidal 2-B koordinat sistemine sahip jeodezik CRS'ler için, iki boyutlu elipsoidal koordinat sistemi eksenleri jeodezik enlem, kuzeye doğru pozitif ve jeodezik boylam, doğuya doğru pozitiftir. Eksen yönü sırasıyla 'kuzey' ve 'doğu' olacaktır.
  • Üç boyutlu elipsoidal koordinat sistemine sahip jeodezik CRS'ler için, bir WKT dizgisinde yatay eksenlerin adı ve kısaltması (ii) 'deki gereklilikleri izlemelidir. Dikey eksen adı 'elipsoidal yükseklik' olmalıdır; dikey eksen kısaltması 'h' olmalıdır ve yatay eksen kısaltmaları dahil edildiğinde dahil edilmelidir.

Yukarıdaki kelimelerin Coğrafi bilgi - Kelimenin koordinat referans sistemlerinin iyi bilinen metin gösterimi kelimesi kelimesine yer aldığını unutmayın.

1.1 özelliklerine kadar bile ,

Koordinat sistemi olarak da adlandırılan bir uzaysal referans sistemi, bir coğrafi (enlem-boylam) , bir öngörülen (X, Y) veya bir jeosantrik (X, Y, Z) koordinat sistemidir.

Bununla birlikte, PostGIS ve Oracle ve birçok üçüncü taraf kütüphanesinin (x,y,[z])her türlü noktayı koruduğu görülmektedir . Bu WKT spesifikasyonunu ihlal ediyor, ancak oldukça yaygın bir kongre. Örneğin GeoJSON bunu da yapar,

Nokta koordinatları x, y düzenindedir (yansıtılan koordinatlar için doğu, kuzeye doğru, coğrafi koordinatlar için boylam ve enlem)

Ve, (lat, uzun) sıralama SRSID 4326 için EPSG tarafından açıkça tanımlanmıştır .

Coğrafi CRS'lerde kullanılan konumun jeodezik enlem, jeodezik boylam ve (üç boyutlu durumda) elipsoidal yüksekliği ile belirtildiği 2B veya 3B koordinat sistemi.

Bu konuda Paul Ramsey'in "Kaptan PostGIS) bloguna, " Haydi Bütün Şunu Arayalım " başlıklı konuyu da inceleyebilirsiniz.

Nicities

Özel bir not olarak, MySQL karışıma iki yeni işlev getiriyor,

Bu işlevler kenara gelen standı ST_X()ve ST_Y()ve gerektiren bir coğrafi SRS veya bir istisna ve hata durum.

Depolama

Gönderen docs

Dahili olarak MySQL, geometri değerlerini WKT veya WKB biçimiyle aynı olmayan bir biçimde saklar. (Dahili biçim WKB gibidir ancak SRID'yi göstermek için ilk 4 bayt içerir.)

Depolama burada tanımlanır .

Table 11.1 WKB Components Example

Component       Size    Value
Byte order      1 byte  01
WKB type        4 bytes 01000000
X coordinate    8 bytes 000000000000F03F
Y coordinate    8 bytes 000000000000F0BF

0

Siparişi kontrol etmenin kolay bir yolu aralık enleminden geçmektir:

SELECT ST_Longitude(ST_SRID(POINT(45, 160), 4326));

ERROR 3732 (22S03) verir: st_srid işlevinin bir parametresi, aralık dışında olan 160.000000 enlemine sahip bir geometri içerir. [-90.000000, 90.000000] içinde olmalıdır;

Kullandığınız işlevlere bağlı olarak siparişin değişebileceğine dikkat edin:

SELECT ST_Longitude(ST_SRID(POINT(45, 90), 4326));
SELECT ST_Longitude(ST_GeomFromText('POINT(45 90)', 4326));
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.