Подтвердить что ты не робот

Откуда вы знаете, какой SRID использовать для shp файла?

Я пытаюсь поместить 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 и их эквиваленты геогек?

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

изображение http://img245.imageshack.us/img245/2545/4326sand.png

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

Файл shp находится в здесь

4b9b3361

Ответ 1

Чтобы подробнее ответить на 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.

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

Я думаю, что ваш PRJ: http://spatialreference.org/ref/sr-org/15/

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

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

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

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

1- Настройте правую проекцию в коде OpenLayers, которая соответствует любым фрагментам, которые вы читаете.

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

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

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

Приветствия

Ответ 5

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

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')

Ответ 6

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

Используйте параметр "Запрос по фильтру" и введите: North American Datum 1983.

Это дает → EPSG: 6269.

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