Как получить ограничивающие координаты для почтового индекса США?

Существует ли служба /API, которая будет принимать почтовый индекс и возвращать ограничивающие (периметрические) координаты, чтобы я мог построить объект Geometry в базе данных MS SQL?

Ограничивая координаты, я имею в виду, что я хотел бы получить список координат GPS, которые составляют многоугольник, который определяет почтовый индекс США.

6 ответов

Решение

Уточнение моего комментария, что почтовые индексы не являются полигонами....

Мы часто думаем о почтовых индексах как об областях (многоугольниках), потому что мы говорим: "О, я живу в этом почтовом индексе...", что создает впечатление ограниченного региона, и, возможно, тот факт, что ZIP означает "План улучшения зоны " помогает ложная ассоциация с полигонами.

На самом деле почтовые индексы - это строки, которые в некотором смысле представляют маршруты почтовых перевозчиков. Геометрически линии не имеют площади. Так же, как линии - это строки точек вдоль координатной плоскости, строки почтового индекса - это строки точек доставки в абстрактном пространстве адресов, определенных USPS.

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

Что это за "абстрактное пространство адресов, назначенных USPS"? Вот как я описываю большую и таинственную базу данных о доставляемых местоположениях, которую ведет Почтовая служба США. Адреса распределяются не на основе географии, а на маршрутах, по которым перевозчики перевозят пассажиров, что обычно связано с улицами и транспортными возможностями.

Некоторые пятизначные почтовые индексы представляют собой только одно здание или комплекс зданий. Это "уникальные" почтовые индексы. Компании и университеты часто получают свои собственные почтовые индексы для маркетинговых или организационных целей. Например, почтовый индекс "12345" принадлежит компании General Electric в Скенектади, штат Нью-Йорк. (Редактировать: в предыдущей версии Google Maps при переходе по этой ссылке вы заметили, что маркер размещения завис, поскольку он указывает на почтовый индекс, который не является координатой. Хотя большинство почтовых индексов США использовалось для отображения область в Google Maps, эти типы не могут, потому что USPS не "владеет" ими, так сказать, и у них нет области.)

Просто для удовольствия, давайте попробуем проверить адрес в уникальном почтовом индексе. Отправляйтесь на SmartyStreets и наберите фиктивный адрес в 12345, например:

Улица: 999 Sdf sdf

Индекс: 12345

Когда вы попытаетесь это проверить, обратите внимание, что... это ДЕЙСТВИТЕЛЬНО! Зачем? USPS доставит кусок в розетку для этого уникального почтового индекса, но в этот момент, это зависит от GE, чтобы распространить его. Практически все, что находится внутри почтового индекса, не имеет отношения к USPS, включая адрес улицы (технически "линия доставки 1"). Многие университеты функционируют аналогичным образом. Вот больше информации об этом.

Теперь попробуйте тот же поддельный адрес, но без почтового индекса, и вместо этого сделайте город / штат:

Улица: 999 Sdf sdf

Город: Скенектади

Штат: Нью-Йорк

Это не подтверждает. Это потому, что, хотя Schenectady содержит 12345, где адрес является "действительным", он геометрически пересекается с "реальными" почтовыми индексами для Schenectady.

Возьмите другой пример: военные. Некоторые военно-морские корабли имеют свои собственные почтовые индексы. Военные адреса - это совершенно другой класс адресов, использующих одно и то же пространство имен. Корабли движутся. Географические координаты нет.

Точность ZIP - еще один интересный. 5-значные почтовые индексы являются наименее "точными" (хотя термин "специфический" может быть здесь более значимым, поскольку почтовые индексы ничего не определяют). 7- и 9-значные почтовые индексы являются наиболее конкретными, часто вплоть до городских или городских кварталов. Но так как каждый почтовый индекс имеет свой размер, очень сложно определить, на каком реальном расстоянии вы говорите.

9-значный почтовый индекс может быть разделен на этаж здания, поэтому у вас есть перекрывающиеся почтовые индексы для потенциально сотен адресов.

Итог: почтовые индексы, вопреки распространенному мнению, не предоставляют географические или граничные данные. Они сильно различаются и на самом деле совершенно бесполезны, если вы не доставляете почту или посылки... но задача USPS заключалась в том, чтобы разрабатывать эффективные маршруты доставки, а не так сильно разделять население на координационные регионы.

Это больше работа бюро переписей. Они составили список картографических границ, поскольку с ними "удобно" работать с почтовыми индексами. Для этого они разбили группы адресов на блоки переписи. Затем они агрегировали данные почтового индекса USPS, чтобы найти связь между своими блоками переписи (в которой есть некоторые приблизительные данные координат) и почтовыми кодами. Таким образом, у нас есть приблизительные значения того, как будет выглядеть линия в виде многоугольника. (Очевидно, они преобразовали 1D линию в 2D многоугольник, преобразовав 2D многоугольник на основе его содержимого, чтобы соответствовать линейным данным - для каждого неуникального, регулярного почтового индекса.)

С их сайта (ссылка выше):

Область табулирования почтового индекса (ZCTA) - это статистическая географическая единица, которая приблизительно соответствует области доставки почтового индекса США из пяти или трех цифр. ZCTA - это совокупности блоков переписи, которые имеют один и тот же преобладающий почтовый индекс, связанный с адресами в главном файле адресов Бюро переписей США (MAF). Трехзначные коды ZCTA применяются к крупным смежным территориям, для которых Бюро переписей США не имеет пятизначную информацию о почтовых индексах в своем MAF. ZCTA точно не отображают области доставки почтовых индексов и не включают все почтовые индексы, используемые для доставки почты. Бюро переписей США создало ZCTA как новую географическую единицу, аналогичную, но заменяющую таблицы данных для почтовых индексов, проведенную в связи с переписями 1990 года и более ранними.

Набор данных USCB неполный, а иногда и неточный. У Google все еще есть дыры в их данных (12345 - несколько хороший пример), но Google в конечном итоге исправит это, просматривая каждый адрес и почтовый индекс вручную. Они уже делают это, но еще не сделали все свои картографические данные идеальными. Естественно, доступ к этим данным ограничен условиями API, и их получение очень дорого.

Уф. Я победил. Я надеюсь, что это помогает прояснить ситуацию. Отказ от ответственности: я был разработчиком на SmartyStreets. Подробнее о геокодировании с адресными данными.

Еще больше информации о почтовых индексах.

То, что вы просите, это услуга по предоставлению "Геокодирования бесплатного почтового индекса". Есть несколько с разным качеством. Вы будете иметь проблемы с написанием чего-то подобного самостоятельно по нескольким причинам:

  1. Почтовые индексы могут быть присвоены одному зданию или почтовому отделению.
  2. Почтовые индексы НЕ считаются полигональными. Проецирование почтовых индексов на многоугольную область потребует от вас обоснованного предположения о том, где находится граница между одним почтовым индексом и следующим.
  3. Данные адреса почтового индекса указывают только местоположение центра для почтового индекса. Данные почтового индекса обеспечивают общую близость адреса. Почтовые адреса, которые существуют между одним почтовым индексом и другим, могут быть предметом спора о том, в каком почтовом индексе он фактически находится.
  4. Почтовый адрес может быть физически ближе к почтовому индексу 11111, однако его официальный почтовый индекс является более удаленной точкой 11112 почтового индекса.

Google Maps имеет API геокодирования:

API Google Maps является клиентским JavaScript. Вы можете напрямую запросить систему геокодирования из php с помощью http-запроса. Тем не менее, Google Maps дает только то, что дает им Почтовая служба США. Точка, представляющая центр почтового индекса.

https://developers.google.com/maps/

карта города / почтовые индексы с использованием карт Google

Мысли о проекции почтового индекса на его ограничивающий прямоугольник

В Соединенных Штатах приблизительно 43 000 почтовых индексов. Это число колеблется от месяца к месяцу, в зависимости от количества внесенных изменений. Почтовые индексы, используемые USPS, не представлены в виде полигонов и не имеют жестких и быстрых границ.

USPS (Почтовая служба США) является органом, который определяет каждый почтовый индекс широта / долгота. Любое программное обеспечение, которое разрешает почтовый индекс в географическом местоположении, будет нуждаться в еженедельных обновлениях. Одна компания, называемая alignstar, предоставляет демографические и ГИС-данные почтовых индексов ( http://www.alignstar.com/data.html).

По физическому (почтовому) адресу найдите географические координаты, чтобы отобразить это местоположение на карте.

Если вы хотите надежно спроецировать, в какой форме находится почтовый индекс, вам нужно будет просто перебрать его и спросить: "Дайте мне каждый почтовый адрес по почтовому индексу", а затем нарисуйте прямоугольники вокруг этих разорванных шариков. Затем вы можете получить общее представление о том, какие географические области охватывают почтовые индексы.

http://vterrain.org/Culture/geocoding.html

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

Другие идеи

http://shop.delorme.com/OA_HTML/DELibeCCtpSctDspRte.jsp?section=10075

http://www.zip-codes.com/zip-code-map-boundary-data.asp

Решение для SQL-сервера

  1. Загрузите файлы Shape из переписи населения США:https://catalog.data.gov/dataset/2019-cartographic-boundary-shapefile-2010-zip-code-tabulation-areas-for-united-states-1-500000 .
  2. Затем я нашел этот репозиторий для импорта файла формы в SQL Server, это было очень быстро и не требовало дополнительного кодирования: https://github.com/xfischer/Shape2SqlServer .
  3. Затем я мог бы написать свой собственный скрипт, чтобы узнать, какие почтовые индексы находятся в созданном мной многоугольнике:

Я думаю, что это то, что вам нужно, он использует перепись США в качестве хранилища: API границ Zipcode США: https://www.mashape.com/vanitysoft/boundaries-io

Выше API показывает границы США (GeoJson) по почтовому индексу, городу и штату. Вы должны использовать API программно для обработки больших результатов.

Я думаю, что вам может помочь ссылка geoJson в мире и API геокодирования карты Google. пример: вы можете использовать geocode api для кодирования zip, вы получите город, штат, страну, затем вы будете искать по миру, а мы geoJson получите границы, у меня есть пример границы штатов США, например, dsdlink

Шаг 1: загрузите cb_2018_us_zcta510_500k.zip

https://www.census.gov/geographies/mapping-files/time-series/geo/carto-boundary-file.html

если вы хотите сохранить их в mysql

шаг 2: в вашем mysql создайте базу данных с именем: Spacedata, запустите эту командуogr2ogr -f "MySQL" MYSQL:"spatialdata,host=localhost,user=root" -nln "map" -a_srs "EPSG:4683" cb_2018_us_zcta510_500k.shp -overwrite -addfields -fieldTypeToString All -lco ENGINE=MyISAM

я загрузил файл на github(https://github.com/sahilkashyap64/USA-zipcode-boundary/blob/master/USAspatialdata.zip)

В вашей "базе пространственных данных" будет 2 таблицы с именем map & geometry_columns .

  1. На "карте" будет столбец с именем "shape".

столбец формы имеет тип "геометрия" и содержит файлы многоугольников / мультиполигонов

  1. В 'geometry_columns' будет определен srid

как проверить, попадает ли точка в многоугольник

SELECT * FROM map WHERE ST_Contains( map.SHAPE, ST_GeomFromText( 'POINT(63.39550 -148.89730 )', 4683 ) )

и хотите показать границу на карте

Выбрать zcta5ce10 как zipcode, ST_AsGeoJSON(SHAPE) ш от map где ST_Contains(map.SHAPE, ST_GeomFromText('POINT(34.1116 -85.6092)', 4683))

"ST_AsGeoJSON" возвращает пространственные данные как geojson. Используйте http://geojson.tools/"HERE maps", чтобы проверить форму geojson.

если вы хотите сгенерировать topojson

mapshaper конвертирует шейп-файл в topojson (нет необходимости конвертировать его в файл kml)npx -p mapshaper mapshaper-xl cb_2018_us_zcta510_500k.shp snap -simplify 0.1% -filter-fields ZCTA5CE10 -rename-fields zip=ZCTA5CE10 -o format=topojson cb_2018_us_zcta510_500k.json

Если вы хотите преобразовать шейп-файл в kml

ʻOgr2ogr -f KML tl_2019_us_zcta510.kml -mapFieldType Integer64= Реальный tl_2019_us_zcta510.shp

Я использовал mapbox gl для отображения 2 почтовых индексов

  1. пример: https://sahilkashyap64.github.io/USA-zipcode-boundary/
  2. код:https://github.com/sahilkashyap64/USA-zipcode-boundary
Другие вопросы по тегам