(решено) OL4 + GeoJSON - не верное позиционирование меток

Не знаете, где задать вопрос? Задавайте здесь.
Ответить
Loom
Новоприбывший
Сообщения: 5
Зарегистрирован: 19 июн 2017, 12:43
Репутация: 0

(решено) OL4 + GeoJSON - не верное позиционирование меток

Сообщение Loom » 19 июн 2017, 13:04

В OpenLayers новичок, поэтому вопрос скорее всего уже обсуждался, но найти ответ на форуме что-то не получилось.

Создаю самую простую карту приблизительно так:

Код: Выделить всё

	map = new ol.Map({
		controls : [
			new ol.control.Rotate(),
			new ol.control.ScaleLine(),
		],
		target : 'map',
		layers : [

			// Тут еще куча слоев с различных сервисов. Вырезано за ненадобностью

			// OSM
			new ol.layer.Tile({
				source: new ol.source.OSM()
			})
		],
		view : new ol.View({
			center : ol.proj.fromLonLat([37.573856, 55.751574]),
			zoom : 9
		})
	});
Дальше создаю слой с под маркеры, с описанием маркеров в GeoJSON и добавляю слой на карту:

Код: Выделить всё

	var vector = new ol.layer.Vector({
		visible: true,
		source : new ol.source.Vector({
			url 	:	'SOME_SERVER_PATH',
			format	:	new ol.format.GeoJSON()
		}),
		style : new ol.style.Style({
			image: new ol.style.Circle({
				radius: 5,
				fill: new ol.style.Fill({
					color: 'rgba(255, 0, 0, .25)'
				}),
				stroke: new ol.style.Stroke({
					color: 'red',
					width: 1
				})
			}),
			text: new ol.style.Text({
				text: 'TEST',
				scale: 1.3,
				fill: new ol.style.Fill({
					color: '#000000'
				}),
				stroke: new ol.style.Stroke({
					color: '#FFFF99',
					width: 3.5
				})
			})
		})
	});

	map.addLayer(vector);
Формат GeoJSON стандартный:

Код: Выделить всё

{
	"type":"FeatureCollection",
	"features":[
		{
			"type":"Feature",
			"properties":{
				"name":"POINT 1"
			},
			"geometry":{
				"type":"Point",
				"coordinates":[
					"37.573856",
					"55.751574"
				]
			}
		}
	],
	"crs":{
		"type":"name",
		"properties":{
			"name":"EPSG:3857"
		}
	}
}
Ну и в итоге, точка ставится в Атлантическом океане. а не в в центре Москвы. В принципе, все логично, ведь базовые координаты того же центра карты пересчитываются в другую проекцию вот тут ol.proj.fromLonLat([37.573856, 55.751574]).

Вопрос в том, как вывести все точки на своих местах, используя координаты, хранящиеся в базе ? Т.е. Lat/Lon ? Единственный способ, приходящий в голову, получать с сервера данные, потом в цикле конвертировать каждую точку в отдельности. Но по моему это какое-то костыляторство.

Может можно все это решить как-то проще и логичнее ? Документация у OL еще та, по сравнению в гуглом или яндексом.

Да, в догонку. В коде выше (описание вида выводимого маркера) есть такой фрагмент ... text: new ol.style.Text({text: 'TEST', ... - вот как сюда передать имя точки из полученного GeoJSON ?

Заранее благодарю.
Последний раз редактировалось Loom 20 июн 2017, 09:35, всего редактировалось 1 раз.

Аватара пользователя
Игорь Лебедь
Завсегдатай
Сообщения: 452
Зарегистрирован: 24 апр 2010, 19:47
Репутация: 101
Откуда: Город в клёнах и акациях
Контактная информация:

Re: OL4 + GeoJSON (lat/lon) - не верное позиционирование мет

Сообщение Игорь Лебедь » 19 июн 2017, 14:47

Проекция в геоджейсоне какая? МГГТ на Бесселе небось?

freeExec
Гуру
Сообщения: 1195
Зарегистрирован: 23 апр 2011, 10:32
Репутация: 205
Откуда: Ульяновск

Re: OL4 + GeoJSON (lat/lon) - не верное позиционирование мет

Сообщение freeExec » 19 июн 2017, 14:49

Раз у вас база, сделайте вывод в порядке принятый у сервисов LonLat. Это куда логичней, чем в каждой системе отображения геоданных мастерить костыли.

Loom
Новоприбывший
Сообщения: 5
Зарегистрирован: 19 июн 2017, 12:43
Репутация: 0

Re: OL4 + GeoJSON (lat/lon) - не верное позиционирование мет

Сообщение Loom » 19 июн 2017, 15:19

2 Игорь Лебедь

Вот тут не скажу, поскольку дали только БД с огромным списком объектов и их координатами. Да и при чем тут проекция, если координаты заданы как "широта (+-90), долгота (+-180)". Извиняюсь, если грубо прозвучало. Т.е. (55.753215, 37.622504) - это центр Москвы например, а (40.714545, -74.007139) - Нью Йорк.

2 freeExec

Не совсем понял, что именно переделать в выводе из БД ?

freeExec
Гуру
Сообщения: 1195
Зарегистрирован: 23 апр 2011, 10:32
Репутация: 205
Откуда: Ульяновск

Re: OL4 + GeoJSON (lat/lon) - не верное позиционирование мет

Сообщение freeExec » 19 июн 2017, 16:13

Формат gejson подразумевает координаты [lon, lat], вот и формируйте его правильно.
А ещё у вас координаты в приведённом примере geojson идут текстом, а не числом, поэтому он их не кушает.

Loom
Новоприбывший
Сообщения: 5
Зарегистрирован: 19 июн 2017, 12:43
Репутация: 0

Re: OL4 + GeoJSON (lat/lon) - не верное позиционирование мет

Сообщение Loom » 19 июн 2017, 16:19

Там и идет lon, а за ним lat. Что же касается текста - это копипаста из распарсенного в удобочитаемый вид JSON. Маркеры наносятся на карту, и расставляются правильно. Только отчет на карте идет базово не в пределах +-90 по широте и +-180 по долготе. Поэтому маркеры и ставятся в Атлантический океан.

freeExec
Гуру
Сообщения: 1195
Зарегистрирован: 23 апр 2011, 10:32
Репутация: 205
Откуда: Ульяновск

Re: OL4 + GeoJSON (lat/lon) - не верное позиционирование мет

Сообщение freeExec » 19 июн 2017, 16:33

Тогда я уже ничего не понимаю, что у вас там за отчёт идёт?
ol.proj.fromLonLat([37.573856, 55.751574]) - однозначно определяется для любой корректной проекции.

Loom
Новоприбывший
Сообщения: 5
Зарегистрирован: 19 июн 2017, 12:43
Репутация: 0

Re: OL4 + GeoJSON (lat/lon) - не верное позиционирование мет

Сообщение Loom » 19 июн 2017, 16:41

Все правильно. Это точка центровки карты. Тут идет конвертация системы координат с помощью fromLonLat, а координаты в GeoJSOn-е выводятся без этой конвертации. Вот и спрашиваю - как их преобразовать для вывода в нужную систему координат.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: OL4 + GeoJSON (lat/lon) - не верное позиционирование мет

Сообщение Denis Rykov » 19 июн 2017, 17:25

Как-то так: https://jsfiddle.net/_DR_/rj6sux9o/. Это если проекция данных у вас EPSG:4326. Что именно вас не устраивает в документации по OpenLayers, по мне так одна из самых лучших.
Spatial is now, more than ever, just another column- The Geometry Column.

Loom
Новоприбывший
Сообщения: 5
Зарегистрирован: 19 июн 2017, 12:43
Репутация: 0

Re: OL4 + GeoJSON (lat/lon) - не верное позиционирование мет

Сообщение Loom » 20 июн 2017, 09:34

Спасибо за пример, все отлично работает. Я указывал проекцию явно, но отображалось все равно не верно. А по поводу документации - видно дело привычки.

Ответить

Вернуться в «Я новичок!»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя