Ставьте точки на карту, долгота/широта не там, где должны быть, хотя SRID тот же

Спасибо, что посмотрели на это - я уверен, что это простой вопрос, но все это очень ново для меня, и после долгих поисков в Интернете мои очки все еще в море!

У меня есть набор данных почтового индекса Великобритании, которые я преобразовал в широту и долготу. У меня также есть файл формы округов Великобритании.

Код, который я использовал для преобразования широты/долготы в столбец геометрической точки, выглядит следующим образом:

ALTER TABLE colic ADD COLUMN longlat geometry(POINT,27700);
update colic set longlat = st_setsrid(st_point( longitude, latitude), 27700);

И это создает столбец со следующими значениями (я включил только пару!):

"0101000020346C000048BF7D1D3867E83FC05B2041F1334A40" "0101000020346C0000F085C954C1A8F7BFA1F831E6AE954A40" "0101000020346C000020D26F5F07CEF4BFE3361AC05B504A40" "0101000020346C00007D3F355EBA49F73FB6847CD0B3614A40"

.prj из моего файла формы:

PROJCS["British_National_Grid", GEOGCS["GCS_OSGB_1936", DATUM["D_OSGB_1936", SPHEROID["Airy_1830",6377563.396,299.3249646]], PRIMEM["Greenwich",0.0],UNIT["Degree",0.01745329251994333 ["Поперек_Меркатора"], ПАРАМЕТР["False_Easting",400000.0], ПАРАМЕТР["False_Northing",-100000.0], ПАРАМЕТР["Central_Meridian",-2.0], PARAMETER["Scale_Factor",0.9996012717], PARAMETER["Latitude_Of_Origin", 49.0], ЕДИНИЦА["Метр",1.0]]

И я установил его SRID на 27700, когда загружаю его с помощью загрузчика шейп-файлов PostGIS.

В PG Admin, когда я спрашиваю:

select st_srid(geom) from counties limit 1;
select st_srid(longlat) from colic limit 1;

Я получаю 27700 за оба.

Но... когда я пытаюсь выполнить какой-либо пространственный запрос, я не получаю ответа, а когда я загружаю слои в квант, точечные данные находятся за пределами оконечности Корнуолла в северной Атлантике и представлены только одной точкой на шкале округов. карта. Если я увеличу их, они «там», но только не в восточной Англии, где они должны быть!

Это моя первая попытка как SQL, так и отображения — я уверен, что есть что-то действительно простое, что я упустил.


person polly compston    schedule 06.09.2013    source источник


Ответы (1)


Вы путаете пространственные привязки (SRS). SRS в файле .prj (также известном как SRID=27700) представляет собой проекцию восточного и северного направлений, что имеют единицы метров. Это не широта и долгота! Более того, вызов столбца longlat, если он не предназначен для координат долготы/широты, является обманом.

Если вы попытаетесь вставить широту/долготу в столбец с SRID=27700, точки будут вести себя не так, как ожидалось, например, они будут находиться в дальнем левом нижнем углу карты.

Если у вас есть данные широты/долготы из WGS84 (SRID=4326), вы можете преобразовать их в восточные и северные направления:

UPDATE colic SET
  geom = ST_Transform(ST_SetSRID(ST_Point(longitude, latitude), 4326), 27700);
person Mike T    schedule 12.09.2013