Как вы знаете, какой SRID использовать для файла shp? - PullRequest
34 голосов
/ 09 октября 2009

Я пытаюсь поместить файл SHP в свою базу данных PostGIS, но данные немного сбиты. Я думаю, это потому, что я использую неправильный SRID. Содержимое файла PRJ выглядит следующим образом:

GEOGCS["GCS_North_American_1983",
DATUM["D_North_American_1983",
SPHEROID["GRS_1980",6378137.0,298.257222101]],
PRIMEM["Greenwich",0.0],
UNIT["Degree",0.0174532925199433]]

С каким SRID это связано? И вообще, как я могу найти SRID на основе информации, найденной в файле PRJ? Есть ли где-нибудь справочная таблица, в которой перечислены все SRID и их эквиваленты 'geogcs'?

Для справки, вот изображение некоторых данных, импортированных с использованием srid=4269 (я также пробовал 4326 и получил те же самые результаты):

image http://img245.imageshack.us/img245/2545/4326sand.png

Желтый - мои данные, импортированные из SHP, а фон - из открытых слоев (от администратора geodjango). Означает ли это, что я использую неправильный SRID, или это просто ожидаемый предел погрешности?

Файл shp от здесь

Ответы [ 6 ]

23 голосов
/ 12 октября 2009

Для уточнения ответа synecdoche SRID иногда называют кодом "EPSG". Код SRID / EPSG является кратким обозначением де-факто для представления проекций с помощью общеизвестного текста.

Вы можете выполнить быстрый поиск в таблице SRID, чтобы узнать, можете ли вы найти точное или похожее совпадение:
SELECT srid, srtext, proj4text FROM spatial_ref_sys WHERE srtext ILIKE '%BLAH%'

Выше было найдено в http://www.bostongis.com/?content_name=postgis_tut01.

Вы можете также искать на Пространственный_конференц.орг для таких вещей. Инструмент поиска примитивен, поэтому вам, возможно, придется воспользоваться поиском Google и указать сайт, но любые результаты покажут вам содержимое ESRI PRJ, PostGIS SQL INSERT и кучу других представлений.

Я думаю, что ваш PRJ находится по адресу: http://spatialreference.org/ref/sr-org/15/

19 голосов
/ 07 декабря 2012

Prj2EPSG - небольшой сайт, нацеленный именно на эту проблему; вставьте содержимое PRJ, и он сделает все возможное, чтобы найти подходящий EPSG. У них также есть API веб-службы . Это не точная наука. Кажется, они используют Lucene и базу данных EPSG для текстового поиска совпадений.

11 голосов
/ 09 октября 2009

Данные выглядят как NAD83, у которого SRID равен 4269. Ваша база данных PostGIS имеет таблицу spatial_ref_sys, которая является таблицей поиска SRID.

Если данные выглядят одинаково с SRID 4269 (NAD83) и 4326 (WGS84), то что-то не так.

7 голосов
/ 15 октября 2009

Перейдите и загрузите утилиты GDAL , утилиты ogrinfo (которые не соответствуют информации о проекции) и ogr2ogr неоценимы.

Джеймс уже дал ссылку на atialreference.org . Это помогает найти информацию о пространственной привязке ... Я предполагаю, что вы загрузили spatial_ref_sys.sql, когда вы подготовили свой экземпляр postgis .

И, честно говоря, я не думаю, что проблема в стороне вещей PostGIS.

Я обычно храню свои данные в разных SRID в моей базе данных PostGIS. Однако мне всегда нужно для проецирования на выход SRS . Вы показываете предварительно отрисованные плитки OpenStreetMap, и я уверен, что они были нарисованы с использованием SRID 900913 ( модифицированная проекция меркатора Карты Google , которую теперь каждый использует для рендеринга ).

Моя рекомендация для вас:

1- Установите правильную проекцию в коде OpenLayers, которая соответствует любым плиткам, с которых вы читаете.

2.- Храните данные в базе данных в любом желаемом SRID (если, конечно, это правильно).

3.- Убедитесь, что сервер, который вы используете для генерации изображений из ваших данных (ArcGIS Server, Mapserver, GeoServer или что-то еще), перепроектирует в тот же SRS.

Все будет совпадать.

Приветствия

6 голосов
/ 30 мая 2012

Используйте модуль Python OSR GDAL для определения кода:

from osgeo import osr

srsWkt = '''GEOGCS["GCS_North_American_1983",
DATUM["D_North_American_1983",
SPHEROID["GRS_1980",6378137.0,298.257222101]],
PRIMEM["Greenwich",0.0],
UNIT["Degree",0.0174532925199433]]'''

# Load in the projection WKT
sr = osr.SpatialReference(srsWkt)

# Try to determine the EPSG/SRID code
res = sr.AutoIdentifyEPSG()
if res == 0: # success
    print('SRID=' + sr.GetAuthorityCode(None))
    # SRID=4269
else:
    print('Could not determine SRID')
1 голос
/ 25 октября 2009

Обязательно взгляните на: http://www.epsg -registry.org /

Используйте опцию Запрос по фильтру и введите: Североамериканские данные 1983.

Это дает -> EPSG: 6269.

Надеюсь, это работает для вас.

...