Откуда вы знаете, какой 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 находится в здесь
Ответы
Ответ 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.
Надеюсь, это сработает для вас.