Бештар

Радиуси PostgreSQL PostGIS ST_Point_Inside_Circle () дар метр


Ман мехостам бо сухан оғоз кунам, ки дар мавриди GIS дониш ва фаҳмиши хеле кам дорам (бо вуҷуди таҷрибаи васеъ бо Google Maps API). Чунин ба назар мерасад, ки PostGIS худ як бозии комилан нави тӯб аст.

Ман ба наздикӣ PostGIS (v2.1.5) -ро бо мисоли PostgreSQL (v9.4) -и худ насб кардам, то нигоҳдорӣ ва кор бо маълумоти GIS -ро оғоз кунам. Ҳоло ман DrawingsManager -и Google Maps API v3 -ро барои кашидани полигонҳо, доираҳо, росткунҷаҳо ва нишондиҳандаҳо истифода мебарам, ки бояд дар пойгоҳи додаҳо нигоҳ дошта шаванд ва баъдтар барои дубора дар Google Maps намоиш додани онҳо гирифта шаванд; Ин шаклҳо инчунин барои дархостҳои гуногуни маҷмӯӣ истифода мешаванд.

Ҳоло ман ду ҷадвал дорам. Онро "маконҳо" меноманд, ки дар он полигонҳо, доираҳо ва росткунҷаҳои бо DrawingManager Google Maps сохташударо нигоҳ медорад. Дуюм, ки "rawdata" номида мешавад, маҷмӯи сабтҳоро дар бар мегирад, ки дар онҳо POINT (лат, дароз) мавҷуд аст.

Пеш аз ҳама, ман мафҳуми пешгӯиҳо ва чӣ гуна кор кардани онҳоро комилан намефаҳмам, аммо бар асоси он чизе ки ман дар интернет хондаам, ин аст, ки ҳисобҳо ва саҳеҳӣ метавонанд ба таври назаррас фарқ кунанд. Ман мефаҳмам, ки Google Maps бо проексияи Web Mercator кор мекунад, ки ба назари ман расман ҳамчун проексияи EPSG: 3857 (ё CRS) маъруф аст, дар ҳоле ки усули афзалиятноки нигоҳдорӣ ва кор бо шаклҳои геометрия () дар PostGIS дар EPSG: 4326 аст. Ҳамин тавр ва бо истинод ба изҳороти ҷадвали зерини худ, ман интихоби геометрияи худро дар EPSG: 4326 дар ҷадвалҳо интихоб кардам.

Усули осонтар ин нигоҳ доштани геометрияи ман дар формати ҷуғрофии навтар аст, аммо ман намехоҳам ин фаъолият ва камбудиҳои функсионалиро бор кунам, зеро ман бо миқдори зиёди маълумот кор мекунам (садҳо ҳазор, агар миллионҳо сабт набошад) ).

Ман кӯшиш мекунам, ки функсияи ST_Point_Inside_Circle () -ро озмоиш кунам, аммо ин нодуруст ба назар мерасад ва ман метавонам тахмин кунам, зеро ин вазифа дараҷаҳоро ҳамчун параметри радиус интизор аст, аммо Google Maps ба ман радиусро дар метр медиҳад. Бо истинод ба http://resources.arcgis.com/en/help/main/10.1/index.html#//009t0000004v000000, ман кӯшиш кардам, ки ҳисобкунакҳоро ба зарб задани метрҳо ба 0.00001 табдил диҳам. Аммо, чӣ қадаре ки радиус дар метр зиёдтар бошад, он дақиқтар ба назар мерасад. Барои ба даст овардани натиҷаи дақиқ ман чӣ кор карда метавонам?

SELECT ST_Point_Inside_Circle (ST_SetSRID (ST_MakePoint (28.239418677985668, -25.75443387513752), 4326), 28.241967111825943, -25.759674774140656, (583 * 0.00001);

Google Maps масофаи байни ду нуқта (маркази доира ва нуқта) -ро 637 метр ҳисоб мекунад, аммо ST_Point_Inside_Circle ҳангоми кӯшиши табдили 583 ба дараҷа ба ҳақиқат бармегардад. Ин маро ба гумон мебарад, ки бо истифода аз 0.00001 метрро ба дараҷаҳо табдил додан мумкин нест.

Роҳи дурусти муайян кардани радиус бо метр кадом аст?


Бе хондани ҳама тафсилот ман фикр мекунам:

Шумо бояд ST_DWithin -ро истифода баред

Шумо бояд ба намуди ҷуғрофия ворид шавед ё танҳо ба ҷои намуди геоэмтрӣ намуди ҷуғрофияро истифода баред, ки ST_DWithin бо метрҳо ба ҷои дараҷаҳо кор мекунад

Пас дархости шумо чунин хоҳад буд:

SELECT ST_DWithin (ST_GeogFromText ('POINT (28.239418677985668 -25.75443387513752)' '), ST_GeogFromText (' POINT (28.241967111825943 -25.759674774140656) '', 583)

Шумо инчунин метавонед масофаро чунин тафтиш кунед:

SELECT ST_Distance (ST_GeogFromText ('POINT (28.239418677985668 -25.75443387513752)' '), ST_GeogFromText (' POINT (28.241967111825943 -25.759674774140656) '));

Бо истифода аз омил дараҷаҳоро ба метр табдил додан мумкин нест. Дараҷаи 1 лон 0 метр дар қутбҳо хеле дақиқ аст, аммо тақрибан 40000/360 километр дар назди экватор.


Харитаҳо бо React Native, Rails ва PostgreSQL

Railsware як ширкатест, ки бо вазифаҳо ва ғояҳои сершумори марбут ба рушди веб ва мобилӣ сарукор дорад. Муҳандисони мо ҳамеша роҳи беҳтарини оптимизатсияи иҷроиш ва буҷетро меҷӯянд. Дидгоҳи аслии Railswarians равиши лоғар аст.

Дар ин шарҳ, мо мехоҳем, ки як хусусияти ҷустуҷӯи геолокатсия дар атрофи макони ҳозираи корбарро баррасӣ кунем. React Native ҳамчун чаҳорчӯбаи сохтани як барномаи ягона барои ҳарду машҳуртарин системаҳои оператсионии бозор, яъне iOS ва Android интихоб карда шуд. Қисми пушти сар тавассути Rails ҳамчун чаҳорчӯбаи веб ва PostgreSQL ҳамчун пойгоҳи дода амалӣ карда шуд. Оё шумо омодаед, ки тафсилот ва хусусиятҳои истифодаи чунин равишро барои таҳияи барномаҳои мобилӣ омӯзед? Хуш омадед, ки таҷрибаи моро хонед.

Биёед нашри худро аз нуктаҳои асосии марбут ба рушди фронт оғоз кунем. Ҳамин тариқ, истифодаи React Native парвандаро мекушояд.


PostGIS дар 20, ибтидо

Бист сол пеш имрӯз, аввалин паёми электронӣ дар рӯйхати фиристодани корбарони postgis (он вақт дар yahoogroups.com ҷойгир карда шуда буд) фиристода шуда буд, ки аввалин нашри рақами PostGIS -ро эълон мекард.

Таърихи аввали PostGIS бо як ширкати консалтингӣ, ки чанд сол пеш оғоз карда будам, алоқаманд буд, Тадқиқоти Рефраксияҳо. Шартномаҳои аввалини ман бо менеҷерони ҳукумати музофоти Бритониёи Колумбия (BC) хотима ёфтанд, ки бо сабабҳои хоси худ бо нармафзори ESRI кор кардан намехостанд ва дар натиҷа ширкати мо малака ва таҷрибаеро, ки бештар аз ҳама "ширкатҳои GIS" дар тиҷорат дошт.

Мо дар пойгоҳи додаҳо ва FME хуб дорем. Мо дар Perl ва дар ниҳоят Java хуб шудем. Мо коршиносони маҳаллӣ дар як асбоби таҳлили ба таври маҳаллӣ таҳияшуда (ва ҳоло корношоям) бо номи Facet будем, ки гӯшти тиҷорати мо дар давоми чор соли аввал буд.

Ин асбоби Facet як ҷузъи калидии "атласи таҳлили ҳавза" буд, ки ҳукумати пеш аз милод аз Фасет дар охири солҳои 90 -ум ба истифода дода буд. Мо ҳамчун зерпудратчиён кор мекардем, реҷаҳои таҳлилиро месохтем, ки даҳҳо қабатҳои экологиро ҷаббида, онҳоро дар ҳавзаи обрезӣ мешикофтанд ва ҷадвалҳо ва харитаҳои тозаву озода мепошиданд, ки барои ҳар як ҳавзаи обӣ як аст. Бо назардошти қудрати ҳисоббарории он давра, мо маҷбур шудем, ки истгоҳҳои сершумори офтобиро барои гузаронидани таҳлили ниҳоии саросари вилоят ва идоракунии навбати кор ва пайгирии натиҷаҳои фосилавӣ истифода барем, мо онҳоро дар ҷадвалҳои PostgreSQL ҷойгир кардем.

Гузоштани қисмҳои буридаи маълумоти фазоӣ ҳамчун блокҳо ба PostgreSQL он чизест, ки PostGIS -ро илҳом бахшид. Воқеан возеҳ ба назар мерасид, ки мо як муҳаррики таҳлили интерактивии таҳлилро бо ҳамаи ин маълумотҳои коркардашуда дар пойгоҳи додаҳо доштем, агар мо метавонем бо блоки бештар кор карда тавонем, на танҳо онҳоро дохил карда, берун кашем.


Бо маълумоти PostgreSQL харитаи оддии Tableau созед

Сохтани харита дар Tableau осон аст. Мо метавонем сутуни фазоиро ба варақаи кории холӣ илова кунем ва Tableau ба таври худкор харита эҷод мекунад.

Барои намунаи аввалини худ, мо мехоҳем майдони обро дар ҳар як вилоят баррасӣ кунем. Барои тасаввур кардани ин, мо харитаи хороплете месозем, ки дар он ранги пуркунии полигонро дар асоси майдони об тағир медиҳем. Ин як техникаи классикии геофазоӣ барои зуд визуализатсияи қолабҳо дар маълумоти мост. Ба шумо лозим аст, ки полигонҳоро бо илова кардани яке аз андозаҳои муайянкунанда, ба мисли номи вилоят ё рамзи FIPS County, тақсим кунед. Шумо инчунин метавонед чораҳои маҷмӯиро хомӯш кунед, то шумо бо ҳар як полигон алоҳида ҳамкорӣ кунед. Дар ин мисол, биёед ба менюи Таҳлил гузарем ва маҷмӯи тадбирҳоро хомӯш кунем.

Ҳоло The Meom Measure -ро ба рафи Тафсил кашед ва пас аз он, voila, шумо харитаи ҳамаи шаҳристонҳои Иёлоти Муттаҳида доред!

Ҳайронед, ки харитаи пасзамина аз куҷо меояд? Дар бораи сафолҳои вектори Tableau як блоги бузурги Tableau мавҷуд аст.

Биёед пеш равем ва полигонҳоро аз рӯи об дар ин вилоят ранг кунем. Сутуни минтақаи обро ("Об") ба рафи ранг кашед ва шумо хоҳед дид, ки тамоми харита ранги тағир медиҳад, аммо аксари полигонҳои вилоят якхелаанд.

Агар шумо ба афсонаи тарафи рост нигоҳ кунед, мебинед, ки доираи об аз 0 то & gt 26,000,000,000 аст. Агар мо ба гистограммаи "awater" нигоҳ кунем, мо инчунин мебинем, ки он тақсимоти ба таври хеле рост каҷшуда дорад (дар хотир доред, ки меҳвари X миқёси миқёс дорад).

Барои ҷобаҷогузории ин каҷ, мо метавонем як пандуси одати фармоишӣ созем, ки маркази рамзи рангро ба чизи хеле камтар аз миёна кӯчонида метавонад. Ҳоло мо як харитаи хубе дорем, ки дар он ҳамаи вилоятҳои ҳаммарз бо уқёнусҳо ва кӯлҳои бузург, инчунин онҳое, ки дар онҳо кӯлҳо ва дарёҳои зиёд мавҷуданд, нишон дода шудаанд. То кунун ин як харитаи хеле стандартӣ дар Tableau аст. Биёед ба баъзе ҳолатҳои ҷолибтари истифода бо PostGIS ва Tableau гузарем.


2.5. Проблемаҳои умумӣ ҳангоми насб

Чанд чизро тафтиш кардан лозим аст, ки кай насб ё навсозии шумо тавре ки шумо интизор будед, намеравад.

Санҷед, ки шумо PostgreSQL 9.6 ё навтарро насб кардаед ва шумо бар зидди ҳамон версияи манбаи PostgreSQL ҳамчун версияи PostgreSQL, ки кор мекунад, тартиб медиҳед. Вақте ки тақсимоти шумо (Linux) PostgreSQL-ро насб кардааст ё шумо ба таври дигар PostgreSQL-ро қаблан насб кардаед ва фаромӯш кардаед, омехтаҳо рух дода метавонанд. PostGIS танҳо бо PostgreSQL 9.6 ё навтар кор мекунад ва агар шумо версияи кӯҳнаро истифода баред, паёмҳои аҷиби ғайричашмдошт ба амал меоянд. Барои санҷидани версияи PostgreSQL, ки кор мекунад, ба пойгоҳи додаҳо бо истифода аз psql пайваст шавед ва ин дархостро иҷро кунед:

Агар шумо тақсимоти RPM-ро иҷро карда истода бошед, шумо метавонед мавҷудияти бастаҳои қаблан насбшударо бо истифода аз чархзании давр фармон ба таври зерин: rpm -qa | grep postgresql

Агар навсозии шумо ноком шавад, боварӣ ҳосил кунед, ки шумо ба пойгоҳи додаҳо, ки аллакай PostGIS насб кардаед, барқарор карда истодаед.

Инчунин санҷед, ки конфигуратсия ҷойгиршавӣ ва версияи PostgreSQL, китобхонаи Proj4 ва китобхонаи GEOS -ро дуруст муайян кардааст.

Натиҷа аз конфигуратсия барои тавлиди файли postgis_config.h истифода мешавад. Санҷед, ки тағирёбандаҳои POSTGIS_PGSQL_VERSION, POSTGIS_PROJ_VERSION ва POSTGIS_GEOS_VERSION дуруст танзим шудаанд.