задача про координацію геоізона листівки


14

Я трохи почав грати з leflet / geojson. Але мої координати не відображаються належним чином, і я не маю поняття, що відбувається.

Мої координати: 52.23943, 4.97599. Вони працюють правильно з setViewфункцією.

var map = L.map('leaflet_map').setView([52.23943, 4.97599], 15);

Але, використовуючи геоязонну особливість, вони є, хммм, "прогнозованими", десь на схід від Сомалі.

var geojsonFeature = {
            "type": "Feature",
            "properties": {
            "name": "Coors Field",
            "amenity": "Baseball Stadium",
            "popupContent": "This is where the Rockies play!"
            },
            "geometry": {
                "type": "Point",
                "coordinates": [52.23943, 4.97599]
            }
        };
        var myLayer = L.geoJson().addTo(map);
        myLayer.addData(geojsonFeature).bindPopup("I am a gjson point.");

Хто знає, що тут відбувається?

EDIT

З чистої цікавості я змінив координати навколо, [4.976143930893815,52.23925499011473]і точка з’являється в правильному місці. Відомий помилок !?

Відповіді:


25

Я б не назвав це помилкою, просто питання заплутаних та суперечливих стандартів.

Коли ми говоримо про географічні місця, ми зазвичай використовуємо Lat-long. Це було кодифіковане в стандарті ISO 6709 .

Маючи справу з декартовою геометрією координат, ми зазвичай використовуємо XY. Багато систем ГІС працюють з географічним розташуванням як особливий випадок 2-D координатної точки, де X являє собою довготу, а Y - широту. Цей порядок координат прямо протилежний звичайному поняттю Lat-long.

До вашої проблеми:

Map.setView приймає l.LatLong в якості вхідного даних, де перший кординат - це Latitude, а другий - Longitude.

Отже, коли хочеш 52.23N, 4.97E, ти проходиш[52.23943, 4.97599]

Стандарт GeoJSON говорить, що для будь-якої точки першим параметром є координата X (тобто довгота), а другий параметр - координата Y (тобто широта);

Отже, коли ви хочете 52.23N, 4.97Eв GeoJSON, вам потрібно пройти [4.97599, 52.23943]

Для подальшого читання перегляньте це питання


Дійсно питання плутанини. Я просто прочитав специфікацію geojson і справді ви абсолютно праві. Ось цитата Порядок елементів повинен відповідати порядку x, y, z (схід, північ, висота для координат у проектній системі відліку координат або довгота, широта, висота для координат у системі відліку географічних координат)
LarsVegas

1
@LarsVegas Початком цього випуску є англійська мова. Ми зазвичай говоримо Lat-long, коли ми говоримо про географічне розташування, а XY, коли говоримо про геометрію координат.
Devdatta Tengshe

Короткий підсумок, які програми та бібліотеки використовують X, Y та які Y, X упорядкування пари: macwright.org/lonlat , люб’язно надано Tom MacWrite
matt wilkie

спасибі за цю корисну відповідь ... але ЧОМУ Геойсон вирішив це зробити ??
Томмі

1

Я просто наткнувся на це питання. Для тих, хто стикається з цією проблемою та має значну кількість довгих пар даних, ви можете скористатися такими js:

var a = "[LatLng(37.43943, 25.30563)],[LatLng(37.4367, 25.30495)],[LatLng(37.43071, 25.29945)],[LatLng(37.42362, 25.30426)],[LatLng(37.42089, 25.31113)],[LatLng(37.41489, 25.31113)],[LatLng(37.41053, 25.30769)],[LatLng(37.40235, 25.30563)],[LatLng(37.40562, 25.31525)],[LatLng(37.41816, 25.31937)],[LatLng(37.42307, 25.3228)],[LatLng(37.40889, 25.33104)],[LatLng(37.4078, 25.33722)],[LatLng(37.41598, 25.33791)],[LatLng(37.40344, 25.35027)],[LatLng(37.40726, 25.3688)],[LatLng(37.42253, 25.39009)],[LatLng(37.4138, 25.39902)],[LatLng(37.42907, 25.4052)],[LatLng(37.42961, 25.41962)],[LatLng(37.44215, 25.42442)],[LatLng(37.44543, 25.45807)],[LatLng(37.46287, 25.4615)],[LatLng(37.47595, 25.46013)],[LatLng(37.47104, 25.42786)],[LatLng(37.48249, 25.42923)],[LatLng(37.48358, 25.41)],[LatLng(37.49502, 25.40588)],[LatLng(37.49447, 25.38597)],[LatLng(37.49066, 25.3791)],[LatLng(37.46941, 25.38254)],[LatLng(37.46178, 25.37773)],[LatLng(37.4754, 25.35988)],[LatLng(37.4972, 25.35782)],[LatLng(37.50047, 25.34203)],[LatLng(37.49774, 25.32761)],[LatLng(37.49229, 25.3228)],[LatLng(37.4912, 25.3125)],[LatLng(37.4814, 25.30907)],[LatLng(37.47268, 25.31113)],[LatLng(37.46341, 25.32692)],[LatLng(37.44597, 25.32692)],[LatLng(37.42798, 25.3228)],[LatLng(37.43943, 25.30563)]".split("],[");
var b = a.map(function(x) { 
    var couple= (/\d+.\d+, \d+.\d+/g).exec(x).toString();
    var splitted = couple.split(", ");
    return "["+splitted[1]+","+splitted[0]+"]";
                            } );
b.join(); 

Редагувати: відповідно до цієї відповіді ТА , мабуть, існує і такий спосіб:

L.GeoJSON.coordsToLatLng().

Я не використовую його, але це здається перспективним.


1
Корисна функція. Більшість входів, ймовірно, будуть голими списками координат, хоча - [[60.672744462452,-135.02487602415],[60.673011537554,-135.02487602415]]. Я також бачив, але не використовував модуль geojson-flip nodejs.
matt wilkie

Ти за свої добрі слова. Це здебільшого було рішення останнього моменту, коли я працював за жорстким графіком. Насправді існує метод, який надає бібліотека листівок, щоб зробити саме це, як я дізнався пізніше (не можу пригадати зараз, але я можу перевірити, якщо ви хочете).
alexandros84

Назва методу Leaflet буде корисною! Я не зміг її знайти, і модуль geojson-flip, про який я згадував вище, не працює з моїми даними.
matt wilkie

Знайдено щось у дерні , який є великим добре підтримуваним модулем: turfjs.org/docs/#flip
matt wilkie

1
ей, вибачте за велику затримку, але ось про що я говорив: stackoverflow.com/questions/35983078/…
alexandros84
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.