Бештар

Пурсиши PostGIS: Ҳама сатрҳо дар тӯли 1 соати ҳамдигар, ки буриш мекунанд

Пурсиши PostGIS: Ҳама сатрҳо дар тӯли 1 соати ҳамдигар, ки буриш мекунанд


Ман postgres (postgis) -ро истифода мебарам ва мехоҳам пурсишеро иҷро кунам, ки ҳамаи сатрҳоеро, ки геометрияҳо бо ҳам мепайвандад ва дар тӯли 1 соат аз якдигар тамға доранд.

Изҳороти SQL ба чӣ монанд аст?

ҷадвал чунин аст:

id {integer} name {characters differenting} border {geometry} timestamp {timestamp with time zone} // ҳудуди дар мисоли ҷадвали дар зер гузошташуда (ҳатмӣ нест) нишонаи вақти номи номи --- + -------- - + -------------------------------- 1 як "2010-09-24 21: 10: 39.515 + 00 "2 two" 2010-09-16 09: 21: 09.362 + 00 "3 three" 2010-07-08 00: 00: 46.549 + 00 "…

Таҳрири №1

Ғайр аз он, ки мутобиқати чорроҳаро дар ин ҷо мисол овардан мумкин аст: барои ҳар як сатр ба ман ягон қатори дигаре, ки дар тӯли 1 соат ҳастанд, диҳед:

интихоб кунед * аз фармони myTable бо t id | t ---- + ------------------------------- 9 | 2011-07-15 18: 20: 20.05 + 02 10 | 2011-07-15 19: 05: 00.05 + 02 11 | 2011-07-15 19: 40: 20.05 + 02 13 | 2011-07-15 20: 31: 01.05 + 02 14 | 2011-07-15 20: 35: 11.05 + 02 (5 қатор) натиҷаи дархости зарурӣ: id | matchid | origTime | matchTime ---- + ---------- + ---------------------------- + ---- -------------------------- 9 | 10 | 2011-07-15 18: 20: 20.05 + 02 | 2011-07-15 19: 05: 00.05 + 02 10 | 9 | 2011-07-15 19: 05: 00.05 + 02 | 2011-07-15 18: 20: 20.05 + 02 10 | 11 | 2011-07-15 19: 05: 00.05 + 02 | 2011-07-15 19: 40: 20.05 + 02 11 | 10 | 2011-07-15 19: 40: 20.05 + 02 | 2011-07-15 19: 05: 00.05 + 02 11 | 13 | 2011-07-15 19: 40: 20.05 + 02 | 2011-07-15 20: 31: 01.05 + 02 11 | 14 | 2011-07-15 19: 40: 20.05 + 02 | 2011-07-15 20: 35: 11.05 + 02 13 | 11 | 2011-07-15 20: 31: 01.05 + 02 | 2011-07-15 19: 40: 20.05 + 02 13 | 14 | 2011-07-15 20: 31: 01.05 + 02 | 2011-07-15 20: 35: 11.05 + 02 14 | 11 | 2011-07-15 20: 35: 11.05 + 02 | 2011-07-15 19: 40: 20.05 + 02 14 | 13 | 2011-07-15 20: 35: 11.05 + 02 | 2011-07-15 20: 31: 01.05 + 02 (10 қатор)

Дар бораи:

m1.id as id, m2.id as match_id, m1.startDate as origTime, m2.startDate as matchTime from myTable m1 internal join myTable m2 on st_intersects (m1.geom, m2.geom) and (m1.startDate - m2) -ро интихоб кунед. startDate <= фосилаи '1 соат' ё - (m1.startDate - m2.startDate) <= interval '1 hour') and m1.id! = m2.id

Пурсиши Postgis ST_Intersects индекси фазоии мавҷудбударо истифода намекунад

Ман як ҷадвали наздишаҳрӣ дорам ва ҳар як шаҳрча арзиши геом дорад, ки мултиполигони онро дар харита нишон медиҳад. Боз як ҷадвали хонаҳо мавҷуданд, ки дар он ҳар як хона арзиши харитаи нуқтаи худро дорад.

Ҳарду сутуни геом бо истифода аз gist индексатсия карда мешаванд ва дар ҷадвали наздишаҳрӣ сутуни ном низ индексатсия шудааст. Ҷадвали наздишаҳрӣ 8к + сабт дорад, дар ҷадвали хонаҳо 300к + сабт.

Ҳоло вазифаи ман аз он иборат аст, ки тамоми хонаҳоро дар атрофи шаҳр бо номи 'FOO' пайдо кунам.

3.5s, баргаштани 486 сабт.

САВОЛИ №2: (префикси ST_INTERSECTS бо _ барои ошкоро талаб кардани он, ки индексро истифода набарад)

Натиҷаи Нақшаи пурсиш: (айнан ҳамон тавре ки Дархости №1)

1,7 сония, баргаштани 486 сабт.

САВОЛИ №3: (Бо истифода аз оператори & amp & amp барои илова кардани қуттии сарҳад қабл аз функсияи ST_Intersects)

иҷро кардани дархост 0,15сро гирифта, 486 сабтро баргардонд.

Эҳтимол танҳо дархости №3 аз индекси фазоӣ фоида ба даст меорад, ки нишондиҳандаҳоро ба таври назаррас беҳтар мекунад. Аммо, синтаксис зишт аст ва худро то андозае такрор мекунад. Саволи ман ин аст:


Шумо мехоҳед "тамоми қаторҳо дар радиуси 5 милии координатҳо", пас ин аст не маҳз мушкили K-наздиктарин ҳамсоя (KNN). Вобастагӣ дорад, аммо парвандаи шумо соддатар аст. "10 қатори ба координатам наздиктаринро ёбед" мушкилоти KNN мебуд.

Координатҳои худро ба арзишҳои ҷуғрофӣ табдил диҳед:

Интихобан, шумо метавонед навъи геометрияи соддаро истифода баред. Дида мебароем:
4.2.2. Вақте ки намуди ҷуғрофиро дар намуди геометрия истифода мебарем

Пас мо як ҷадвал дорем, ки ба монанди:

Танҳо ба шумо лозим аст ST_DWithin () - ва а индекси фазоӣ барои зудтар кардани он:

Ё шумо метавонед сутунҳои аслии худро истифода баред ва индекси функсионалӣ эҷод кунед. Ин ва ҷузъиёти дигари ин посухи наздик ба dba.SE:

Шумо бояд аввал бо истифода аз фармони COPY аз файли форматкардаи CSV ҷадвал созед (агар файл ба PostgreSQL дастрас бошад сервер) ё фармони copy дар psql, агар файл барои сервер маҳаллӣ набошад. Агар шумо ягон душворӣ дошта бошед, барои мисолҳои дигар Q + A дар SO бинед.

Пас аз он ки шумо маълумоти худро дар ҷадвал доред, шумо бояд сутунҳои тӯлонӣ ва арзи худро ба намуди ҷуғрофии PostGIS бо роҳи илова кардани сутун ба ҷадвали намуди ҷуғрофия (POINT, 4326) табдил диҳед ва сипас он сутунро (дар инҷо gps номида мешавад) бо мувофиқи мувофиқ ҷойгир кунед арзишҳо:

Ба он сутун индекс илова кунед, то ки ҷустуҷӯҳои самарабахш фароҳам оварда шаванд:

Ҳоло шумо метавонед сатрҳоро дар масофаи 5 мил аз маҳалли муайяншуда пайдо кунед, масалан. (-72.657, 42.0657), ба тариқи зайл:

Аҳамият диҳед, ки ST_DWithin () дар сутуни ҷуғрофия бо метр кор хоҳад кард, бинобар ин шумо бояд радиуси худро бо мил ба 1609 метр дар як мил зарб кунед.


Оптимизатсия дархости буриш байни ду ҷадвали бузурги фазоӣ

Ман кӯшиш мекунам, ки чорроҳаи байни ду ҷадвали фазоиро беҳтар кунам ва мехоҳам дар бораи тарҳҳои ҷадвал, дархостҳо ва конфигуратсияҳои dba ягон маслиҳат гирам.

Ҷадвалҳо:

Ҷадвали teste.recorte_grade ҳозир 1,655,569 сатр дорад, аммо ин зернамунаи барои ин ҷадвали 9 миллион сатр сохта шудааст.

Ҷадвали teste2.uso_2012 дорои 177 888 қатор аст ва ин ҳама маълумотест, ки ҳамеша дорад.

Масъала:

Ман танҳо мехоҳам ин майдон ва рамзи шабакаи ҳар чорроҳа байни ҳарду ҷадвал бошад, асосан натиҷаи ин пурсиш:

Аммо ин пурсиш дар бораи он давидааст 16 соат бе натиҷа, вақте ки ман қарор додам, ки иҷрои онро бекор кунам. Агар бо зернамуна ин тӯл кашида бошад, бо маҷмӯи пурраи маълумот тасаввур кунед.

Ҳарду ҷадвал қаблан таҳлил карда шуда буданд.

Ман фикр мекардам, ки ин фикри хуб аст, агар инро дар як саволҳои сершумор барои ҳар як гридкод ҷудо кунем. Ин аст, ки ман индекси ҳешро эҷод кардам.

Ин тақсимоти маълумот дар ҷадвали teste2.uso_2012 аст:

Инҳоянд баъзе натиҷаҳои дархостҳо барои рамзҳои инфиродӣ:

teste.recorte_2012 ва teste2.uso_2012 тақрибан ҳамон ҷадвал мебошанд, ки uso_2012 1 сутун камтар доранд.

Тавре ки шумо мебинед, ин чандон умедбахш ба назар намерасад. Оё барои тавсеаи ин раванд тавсияе ҳаст?

Ман дар бораи ташкили тартиботи захирашуда фикр мекунам, ки сатрҳои 177,888-ро давр занед ва мустақиман чорроҳаҳо ва масоҳати ҳар кадоми онҳоро гиред. Оё ин фикри хуб аст?

Танзимот:

Маълумоти сервер:

  • PostgreSQL 9.2.14
  • БАРНОМАИ CENTOS 6.4
  • 8GB SRAM
  • НИГОҲдории V7000
  • Intel (R) XEON (R) CPU E5-2620 2 GHZ
  • POSTGIS = "2.0.2 r10789" GEOS = "3.3.6-CAPI-1.7.6" PROJ = "Rel. 4.8.0, 6 марти 2012" GDAL = "GDAL 1.9.2, барориши 2012/10/08" LIBXML = "2.7.6" RASTER

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

Ман баъзе хусусиятҳои махсуси хеле мураккаб бо қариб 100k қуллаҳо дорам. Дар бораи версияи Postgres, танҳо DBAs метавонанд инфрасохторро нав кунанд ва ман яке аз онҳо нестам.


4.4. Гирифтани маълумоти GIS

Маълумотро аз пойгоҳи додаҳо бо истифода аз SQL ё loader / dumper file Shape баровардан мумкин аст. Дар қисмати SQL мо баъзе операторҳои барои муқоиса ва дархостҳо дар ҷадвалҳои фазоӣ мавҷудбударо муҳокима хоҳем кард.

4.4.1. Истифодаи SQL

Воситаи оддитарини берун кардани маълумот аз пойгоҳи додаҳо истифодаи пурсиши интихобкардаи SQL ва ба файли матнии ҷудошаванда партофтани сутунҳои натиҷа мебошад:

Аммо, вақтҳое мешаванд, ки барои кам кардани шумораи майдонҳои баргардонидашуда ягон маҳдудият лозим аст. Дар ҳолати маҳдудиятҳои атрибутӣ, танҳо ҳамон як синтаксиси SQL-ро бо ҷадвали ғайримуқаррарӣ истифода баред. Дар ҳолати маҳдудиятҳои фазоӣ, операторони зерин дастрас / муфиданд:

Ин оператор мегӯяд, ки оё қутти ҳудуди як геометрия қуттии ҳудуди дигарашро буридааст ё не.

Ин операторҳо месанҷанд, ки оё ду геометрия аз ҷиҳати геометрӣ якхелаанд. Масалан, агар 'POLYGON ((0 0,1 1,1 0,0 0))' ба 'POLYGON ((0 0,1 1,1 0,0 0))' баробар бошад (он аст).

Ин оператор каме соддалавҳтар аст, танҳо он санҷида мешавад, ки оё қуттиҳои ҳудуди геометрияҳо яксонанд.

Баъдан, шумо метавонед ин операторҳоро ҳангоми дархостҳо истифода баред. Дар хотир доред, ки ҳангоми мушаххас кардани геометрияҳо ва қуттиҳо дар сатри фармонии SQL, шумо бояд тасвири сатрҳоро ба воситаи функсияи "GeomFromText ()" ба геометрия табдил диҳед. Ҳамин тавр, масалан:

Дархости дар боло овардашуда сабти ягонаро аз ҷадвали "ROADS_GEOM" бармегардонад, ки дар он геометрия ба ин арзиш баробар буд.

Ҳангоми истифодаи оператори "& amp & amp", шумо метавонед як BOX3D-ро ҳамчун хусусияти муқоиса ё GEOMETRY муайян кунед. Ҳангоми муайян кардани GEOMETRY, аммо қуттии ҳудуди он барои муқоиса истифода мешавад.

Дархости дар боло овардашуда қутти ҳудуди бисёркунҷа барои мақсадҳои муқоиса истифода мешавад.

Дархости фазоии маъмултарин эҳтимолан дархости "дар асоси кадрҳо" хоҳад буд, ки нармафзори муштарӣ, ба монанди браузерҳои додаҳо ва веб-харитаҳо, барои гирифтани "чаҳорчӯбаи харита" ба арзиши маълумот барои намоиш истифода мешавад. Бо истифода аз объекти "BOX3D" барои чорчӯба, чунин дархост чунин менамояд:

Ба истифодаи SRID, барои муайян кардани дурнамои BOX3D диққат диҳед. Арзиши -1 барои нишон надодани SRID муайян карда мешавад.

4.4.2. Истифодаи Думппер

Дампери ҷадвали pgsql2shp мустақиман ба базаи маълумот пайваст мешавад ва ҷадвалро (эҳтимолан бо дархост муайян карда мешавад) ба файли шакл табдил медиҳад. Синтаксиси асосӣ инҳост:

Имконоти сатри фармон инҳоянд:

Натиҷаро ба номи ягон файл нависед.

Хости пойгоҳи додаҳо барои пайвастшавӣ.

Порт барои пайваст шудан ба ҳости пойгоҳи додаҳо.

Пароле, ки ҳангоми пайвастшавӣ ба пойгоҳи дода истифода мешавад.

Номи корбаре, ки ҳангоми пайвастшавӣ ба пойгоҳи дода истифода мешавад.

Дар мавриди ҷадвалҳое, ки сутунҳои сершумори геометрия доранд, сутуни геометрия, ки ҳангоми навиштани файли шакл истифода мешавад.

Аз курсор дуӣ истифода баред. Ин амалиётро тезтар мекунад, аммо агар ягон атрибути NON-геометрия дар ҷадвал барои матн матн надошта бошад, кор намекунад.

Ҳолати хом. Майдони гидро партоед ё аз сутунҳо гурехта нашавед.

Барои мутобиқати қафо: ҳангоми андохтан аз пойгоҳи додаҳои кӯҳнаи (пеш аз 1.0.0) postgis файли шакли 3-ченака нависед (бо нобаёнӣ ин навиштани файли шакли 2-ченака аст). Аз postgis-1.0.0 + сар карда, ченакҳо пурра рамзгузорӣ шудаанд.


Pivot

Шумо мехоҳед, ки натиҷа бо як сутун дар як group_id интихобшуда гардонида шавад. Истифода баред crosstab () аз модули ҷадвалбанди иловагӣ барои натиҷаҳои зудтарин. Агар шумо бо он ошно набошед, аввал дастурҳои асосиро дар инҷо хонед:

Унсурҳои гумшуда NULL мебошанд. Шумо наметавонед инро бо COALEACE дар атрофи count () дар пурсиши дохилӣ ба даст оред. Ба ҷои ин, COALESCE дар пурсиши беруна истифода баред. Мисли:

Аҳамият диҳед, ки дар натиҷа соатҳо бе ягон сатр бедараканд. Агар шумо хоҳед, ки сатрҳои холӣ дар натиҷа бошанд, барои пур кардани ҷадвали вақт OOTER JOIN истифода кунед. Мисли:


Тартиби сутунҳо дар индекси мураккаб дар PostgreSQL (ва тартиби дархост)

Ман мизе бо сатрҳои 50K дорам. Ин дар асл як ҷадвали PostGIS аст.

Дархост аз 4 қисм иборат аст (1 ҳатмӣ) (3 Опсия)

  1. қуттии чорроҳа (росткунҷаи ҷуғрофӣ) бо 4 лот, дароз (ман st_intersects истифода мекунам) [Ҳатмӣ]
  2. Диапазони сана (min, max) дар майдони сана
  3. Навъи файлҳо (маҷмӯи то 8 қимати матн), ки ҳоло IN (.) - ро истифода мебаранд, аммо ман дар ҳолати зарурӣ метавонам ҷадвали муваққатӣ созам. Ман мебинам, ки бисёр одамон IN-ро дӯст намедоранд.
  4. Кишвар (арзиши матн).

Ман тақрибан 100 - 4000 қатори баргаштаро интизорам

Агар ман дар ҷадвал индекси мураккаб созам, аввал кадом сутунро истифода кунам. Шакли хуб шояд ҷойгоҳ бошад (маълумот дар тамоми ҷаҳон паҳн мешавад). Ман ҳоло онро ҳамчун индекси GIST дорам.

Индекси дигар BTREE хоҳад буд.

Интуиси ман мегӯяд, ки донаҳои хубро истифода баред ва албатта охирин. Масалан. Танҳо тақрибан 12 намуди файл мавҷуд аст, ки ин барои сатр хеле калон хоҳад буд.

Гуруҳои PostgreSQL ва PostGIS (ки ботинии системаро медонанд) чӣ мегӯянд?

Иҷозат диҳед ин саволро тезтар кунам.

  1. Ман намехоҳам, ки касе кореро анҷом диҳад, ки бояд иҷро кунад. Ман вақти шуморо аз ҳад зиёд эҳтиром мекунам. Пас, ман ба таҳлили шарҳи баъдтар хоҳам расид.
  2. Танҳо ман ишораҳо ва маслиҳатҳо ва дастурҳо будам.
  3. Ман ин фиристодаи хурди аъло хондам: https://devcenter.heroku.com/articles/postgresql-indexes#managing-and-maintaining-indexes about indexes
  4. Он чизе ки ман одатан мекунам, ин сохтани 4 индекси ҷудогона (гео-қуттӣ, номи кишвар, file_type ва сана) аст, аммо он чизе, ки мехоҳад пурсиши таркибӣ кунад.

Ба ман бигӯед, ки ягонтои ин тахминҳо хатост. (Ман барои идеяи индекси мураккаб хеле нав ҳастам)

  1. Тартиб муҳим аст. Ҳамчун индекси аввал онеро интихоб кунед, ки сатрҳоро аз ҳама бештар коҳиш медиҳад (дар ҳолати ман маҳалли ҷойгиршавӣ (ҷуғрофия), ки бисёркунҷаи оддӣ аст ё бисёрпаҳлӯ беҳтаринро иҷро мекунад).
  2. Баъзан дархостҳо индексатсияро аз даст медиҳанд. Аммо агар ман дархости мураккабро бо тугмаи (# 1, # 2, # 3, # 4) эҷод кунам, ҳатто агар корбар чизе офарад, ки барои # 1, # 3 дархост кунад, банақшагир ҳанӯз ҳам дархости таркибиро истифода хоҳад кард, зеро онҳо фармоиш медиҳанд нигоҳ дошта мешавад.
  3. Одатан, ман се дархости BTREE ва як GIST эҷод мекунам (барои намуди ҷуғрофия). PostGIS сохтани таркибро аз намудҳои гуногуни индекс дастгирӣ намекунад. Пас, ман бояд GIST индекси мураккабро истифода барам. Аммо ин набояд ба чизе зарар расонад.
  4. Агар ман ягон индекси иловагии мураккаб ё ягонаи арзишро эҷод кунам, банақшагир барои зирактаринашро интихоб кардан кофист.
  5. Номи кишвар метавонад тақрибан 250 арзишҳои мухталиф дошта бошад ва албатта бо ҷойгиршавӣ (геобокс) сахт алоқаманд аст, аммо агар индекси беҳтарини навбатӣ барои коҳиши андозаи сатр file_type бошад, ман бояд онро баъд истифода барам. Ман умедворам, ки корбарон аксар вақт кишвар ё санаи худро дар маҷмӯи пурсишҳои худ истифода намебаранд.
  6. Ман аз ташвиши индекси мураккаби 4 калид хавотир намешавам, то андозаи маълумоти индексро хеле зиёд кунад. Яъне. агар индекси яквақта 90% афзоиши иҷрои кор бошад, илова кардани 3 ҷузъи дигар барои мураккаб кардани он зараре намерасонад. Ва баръакс, ман бояд воқеан ҳарду индексро эҷод кунам. Индекси ягонаи ҷуғрофӣ, инчунин индекси мураккаб ва бигзор банақшагир муайян кунад, ки кадомаш беҳтар аст ва он андозаи ҷадвали индексро ба назар мегирад.

Боз ҳам, ман аз касе намехоҳам, ки роҳи ҳалли маро таҳия кунад, ман кори дигаронро ба назар намегирам. Аммо ба ман чизҳое лозиманд, ки ҳуҷҷатҳои PostGreSQL ба ман дар бораи татбиқ нақл накунанд

[Сабаби то ҳол надоштани натиҷаи ШАРОҲИЯТ барои нишон додан ин аст, ки ман бояд ин ҷадвали қатори 25K-ро аз ҷадвали сатри 24M эҷод кунам. Ин аз он вақте ки ман фикр мекардам, вақти зиёдтар мегирад. Ман чизҳоро ба гурӯҳҳои 1,000 унсурҳо гурӯҳбандӣ мекунам ва дархости корбарро дар ҷадвали сатри 25K мегузорам. Аммо саволи навбатии ман, истифодаи натиҷаҳои ин пурсишро ба ҷадвали қатори MASTER 25M ва кашидани чизҳо дар бар мегирад ва дар он ҷо нишондиҳандаи таркиб воқеан HIT хоҳад буд].

Натиҷаҳои таҳлилро шарҳ диҳед (ман ягон индекси мураккаб надоштам ва аз суръате, ки мебинам, намедонам, ки ба ман лозим аст).


4.7. Истифодаи Mapserver

Нусхаи SVN ( 8935 )

Миннесота Mapserver як сервери веб-харитаи интернет мебошад, ки ба мушаххасоти сервери OpenGIS Web Mapping Server мувофиқат мекунад.

4.7.1. Истифодаи асосӣ

Нусхаи SVN ( 8935 )

Барои истифодаи PostGIS бо Mapserver, ба шумо лозим аст, ки дар бораи чӣ гуна ба танзим даровардани Mapserver -ро бидонед, ки ин аз доираи ин ҳуҷҷат берун аст. Ин бахш масъалаҳои мушаххаси PostGIS ва тафсилоти конфигуратсияро фаро мегирад.

Барои истифодаи PostGIS бо Mapserver, ба шумо лозим аст:

Нусхаи 0.6 ё навтари PostGIS.

Нусхаи 3.5 ё навтари Mapserver.

Mapserver ба PostGIS / PostgreSQL ба монанди ҳама муштариёни дигари PostgreSQL дастрас аст - бо истифодаи libpq. Ин маънои онро дорад, ки Mapserver метавонад дар ҳама гуна мошинҳо бо дастрасии шабакавӣ ба сервери PostGIS насб карда шавад, ба шарте ки система китобхонаҳои муштарии libpq PostgreSQL дошта бошад.

Mapserver-ро бо ҳар варианте, ки мехоҳед, тартиб диҳед ва насб кунед, аз ҷумла варианти конфигуратсияи "--with-postgis".

Дар файли Mapserver харитаи худ, қабати PostGIS илова кунед. Барои намуна:

Дар мисоли боло, дастурҳои мушаххаси PostGIS чунинанд:

Барои қабатҳои PostGIS, ин ҳамеша "постгис" аст.

Пайвасти пойгоҳи додаҳо аз ҷониби 'сатри пайвастшавӣ' танзим карда мешавад, ки он маҷмӯи калидҳо ва арзишҳои стандартии ба ин монанд мебошад (бо арзиши пешфарз дар & lt & gt):

user = & ltusername & gt password = & ltpassword & gt dbname = & ltusername & gt hostname = & ltserver & gt port = & lt5432 & gt

Сатри холии пайвастшавӣ ҳанӯз ҳам эътибор дорад ва ҳар кадоме аз ҷуфтҳои калид / қиматро тарк кардан мумкин аст. Ҳадди аққал шумо одатан номи пойгоҳ ва номи корбарро барои пайвастшавӣ пешниҳод мекунед.

Шакли ин параметр "& ltcolumn & gt from & lttablename & gt" мебошад, ки сутун сутуни фазоӣ аст, ки ба харита оварда мешавад.

Филтр бояд сатри дурусти SQL бошад, ки ба мантиқи одатан пас аз калимаи "WHERE" дар дархости SQL мувофиқат кунад. Ҳамин тавр, масалан, барои нишон додани танҳо роҳҳои дорои 6 ё зиёда қатор, филтри "num_lanes & gt = 6" -ро истифода баред.

Дар пойгоҳи додаҳои фазоии худ, ба шумо нишондиҳандаҳои фазоӣ (GiST) -ро барои ҳама қабатҳои кашидаатон сохта бошед.

Агар шумо қабатҳои худро бо истифода аз Mapserver пурсед, ба шумо инчунин "индекси оид" лозим аст.

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

Барои сохтани "индекси оид", SQL-и зеринро истифода баред:

4.7.2. Саволҳои зуд-зуд додашаванда

Нусхаи SVN ( 8935 )

Вақте ки ман EXPRESSION-ро дар файли харитаи худ истифода мекунам, ҳолат ҳеҷ гоҳ ба ҳақиқӣ барнамегардад, гарчанде ки ман медонам, ки арзишҳо дар ҷадвали ман ҳастанд.

Баръакси файлҳои шакл, номҳои майдони PostGIS бояд бо истифода аз EXPRESSIONS истинод карда шаванд ҳарфи хурд .

ФИЛТРЕ, ки ман барои файлҳои Shape истифода мекунам, барои ҷадвали PostGIS-и ҳамон маълумот кор намекунад.

Баръакси файлҳои формат, филтрҳо барои қабатҳои PostGIS синтаксиси SQL -ро истифода мебаранд (онҳо ба изҳороти SQL замима карда мешаванд, пайвасткунандаи PostGIS барои кашидани қабатҳои Mapserver тавлид мекунад).

Қабати PostGIS-и ман нисбат ба қабати файли Shape хеле сусттар кашида мешавад, оё ин муқаррарӣ аст?

Дар маҷмӯъ, интизор шавед, ки қабатҳои PostGIS нисбат ба қабатҳои эквиваленти Shape 10% сусттар бошанд, бинобар сабаби изофаи изофа дар пайвастагиҳои пойгоҳи додаҳо, тағирёбии маълумот ва интиқоли маълумот байни пойгоҳи додаҳо ва Mapserver.

Агар шумо мушкилоти назарраси иҷрои қуръакаширо ёбед, эҳтимол дорад, ки шумо дар ҷадвали худ индекси фазоӣ насохтаед.

Қабати PostGIS-и ман хуб аст, аммо дархостҳо дарвоқеъ сустанд. Чӣ шуд?

Барои он ки саволҳо зуд бошанд, шумо бояд калиди беназир барои ҷадвали фазоии худ дошта бошед ва шумо бояд дар он калиди беназир индекс дошта бошед.

Шумо метавонед муайян кунед, ки калиди беназирро барои mapserver бо банди ИСТИФОДАИ НОТАКРОР дар сатри DATA-и худ истифода баред:

Агар ҷадвали шумо сутуни беназири мушаххасе надошта бошад, шумо метавонед сутуни беназирро бо истифодаи сатри PostgreSQL "оид" барои сутуни беназири худ "сохтакорӣ" кунед. "оид" сутуни нодири пешфарз аст, агар шумо онро эълон накунед, пас баланд бардоштани суръати дархостатон масъалаи сохтани индекс дар ҷадвали фазоии шумост.

4.7.3. Истифодаи пешрафта

Нусхаи SVN ( 8935 )

Банди USE псевдо-SQL барои илова кардани баъзе маълумот истифода бурда мешавад, то mapserver дар фаҳмидани натиҷаҳои дархостҳои мураккабтар кӯмак расонад. Мушаххастар, вақте ки ҳамчун намуди ҷадвали сарчашма истифода мешавад ё намуд ё зеркисмат (чизи дар тарафи рост буда аз "АЗ" дар таърифи DATA) барои mapserver муайян кардани худкори муайянкунандаи беназир барои ҳар як сатр ва инчунин SRID мушкилтар аст барои ҷадвал. Банди ИСТИФОДА метавонад бо ин ду маълумот mapserver пешниҳод кунад:

Mapserver барои ҳар як сатр ID-и беназирро талаб мекунад, то сатр ҳангоми иҷрои дархостҳои харита муайян карда шавад. Одатан, онИДИД-ро ҳамчун як идентификатори беназир истифода мебурд, аммо намудиҳо ва зеркаллобҳо ба таври худкор сутуни посух надоранд. Агар шумо хоҳед, ки вазифаи пурсиши Mapserver-ро истифода баред, ба шумо лозим аст, ки ба намуди худ як сутуни беназир илова кунед ё зергурӯҳро илова кунед ва онро бо ИСТИФОДАИ НОТАКРОР эълон кунед. Масалан, шумо метавонед ба таври возеҳе яке аз арзишҳои оид ба ҷадвалро барои ин мақсад ё ягон сутуни дигареро интихоб кунед, ки барои маҷмӯи натиҷа беназир аст.

Изҳороти ИСТИФОДА ҳатто барои изҳороти соддаи DATA муфид буда метавонад, агар шумо дархостҳои харитаро иҷро кунед. Пештар тавсия дода шуда буд, ки дар сутуни оид ба ҷадвалҳои дар қабатҳои пурсишшаванда истифодашаванда индекс илова карда шавад, то иҷрои дархостҳои харита суръатнок карда шавад. Аммо, бо банди USING, ба mapserver гуфтан мумкин аст, ки калиди асосии ҷадвали шуморо ҳамчун идентификатор барои дархостҳои харита истифода барад ва пас дигар доштани индекси иловагӣ шарт нест.

"Дархости харита" амали клик кардани харита барои пурсидани маълумот дар бораи хусусиятҳои харита дар он маҳал мебошад. "Дархостҳои харита" -ро бо дархости SQL дар таърифи DATA омехта накунед.

PostGIS бояд бидонад, ки кадом системаи истинод дар фазоро геометрияҳо истифода мебаранд, то маълумоти дурустро ба mapserver баргардонад. Одатан, ин маълумотро дар ҷадвали "geometry_columns" дар пойгоҳи додаи PostGIS пайдо кардан мумкин аст, аммо ин барои ҷадвалҳое, ки фавран сохта мешаванд, ба монанди зерсохторҳо ва намудҳо ғайриимкон аст. Пас, ИСТИФОДАИ SRID = хосият имкон медиҳад, ки SRID дуруст дар таърифи DATA муайян карда шавад.

Огоҳӣ

Ҷудокунанда барои қабатҳои Mapserver PostGIS хеле ибтидоӣ аст ва дар чанд минтақа ба ҳарф ҳассос аст. Эҳтиёт бошед, ки ҳамаи калимаҳои калидии SQL ва ҳамаи бандҳои ИСТИФОДАИ шумо бо ҳарфҳои калон гузошта шаванд ва банди ИСТИФОДАИ НОТАИШ аз банди USR SRID -и шумо пештар бошад.


4 ҷавоб 4

Дар аксари ҳолатҳо, тартиби навъҳои индекс қариб ки аҳамият дорад. Postgres метавонад ба қафо амалан зудтар скан кунад. Аммо барои пурсишҳои диапазони сутунҳои гуногун он метавонад а кунад бузург фарқият. Зич алоқаманд:

Тартиби навбати сутуни якуми id_phi дар индекс аҳамият надорад. Азбаски он тафтиш карда мешавад баробарӣ (=), он бояд аввал биёяд. Шумо инро дуруст фаҳмидед. Маълумоти бештар дар ин ҷавоби марбут:

Postgres метавонад дар муддати кӯтоҳ ба id_phi = 0 гузарад ва ду сутуни зерини индекси мувофиқро баррасӣ кунад. Инҳо бо пурсида мешаванд шароити диапазони тартиби навбати баръакс (& lt =, & gt =). Дар индекси ман, сатрҳои тахассусӣ дар ҷои аввал меистанд. Бояд босуръат роҳи имконпазир бо индекси B-Tree бошад 1 :

  • Шумо мехоҳед start_date_time & lt = чизе: индекс пеш аз ҳама вақтро дошта бошад.
  • Агар он мувофиқат кунад, инчунин сутуни 3 -ро санҷед.
    То он даме, ки сатри аввал ба талабот ҷавоб надиҳад (такрори фаврӣ).
  • Шумо мехоҳед end_date_time & gt = something: index нишонаи охирини вақтро дошта бошад.
  • Агар он ба талабот ҷавобгӯ бошад, қаторҳоро кашед, то он даме ки аввалаш надиҳад (фаврӣ зуд).
    Бо арзиши навбатӣ барои сутуни 2 идома диҳед ..

Postgres метавонад сканро пеш барад ё қафо. Роҳе, ки шумо нишондиҳанда доштед, бояд онро хонед ҳама сатрҳо дар ду сутуни аввал ва баъд мувофиқат мекунанд филтр дар сеюм. Боварӣ ҳосил кунед, ки бобро хонед Индексҳо ва фармоиш дар дастур. Ин ба саволи шумо хеле хуб мувофиқат мекунад.

Дар ду сутуни аввал чанд сатр мувофиқат мекунад?
Танҳо чанд нафар бо start_date_time наздик ба оғози доираи ҷадвал мебошанд. Аммо қариб ҳама сатрҳо бо id_phi = 0 дар охири хронологии ҷадвал! Ҳамин тавр, иҷрои кор бо гузашти вақтҳои баъдӣ бадтар мешавад.

Сметаи банақшагирӣ

Банақшагир сатрҳоро = 62682 барои пурсиши мисоли шумо тахмин мезанад. Аз инҳо, ҳеҷ кас мувофиқат намекунад (сатрҳо = 0). Агар шумо ҳадафи омориро барои ҷадвал зиёд кунед, шумо метавонед тахминҳои беҳтареро ба даст оред. Барои 2.000.000 қатор.

. метавонад пардохт кунад. Ё ҳатто баландтар. Маълумоти бештар дар ин ҷавоби марбут:

Ба гумони ман, ин ба шумо барои id_phi лозим нест (танҳо чанд арзишҳои фарқкунанда, ки ба таври мусовӣ тақсим карда мешаванд), балки барои тамғаҳои вақт (қуръаҳои арзишҳои гуногун, нобаробар тақсимшуда).
Ман инчунин фикр намекунам, ки ин бо нишондиҳандаи такмилёфта муҳим нест.

CLUSTER / pg_repack / pg_squeeze

Агар шумо инро зудтар мехоҳед, шумо метавонед тартиби ҷисмонии сатрҳоро дар ҷадвали худ ба тартиб дароред. Агар шумо имкон дошта бошед, ки мизи худро танҳо мустақиман қулф кунед (масалан, дар соатҳои истироҳат), ҷадвали худро нависед ва сатрҳоро мувофиқи индекс бо CLUSTER фармоиш диҳед:

Ё pg_repack ё pg_squeeze-и баъдиро дида мебароем, ки он метавонад бе қулфи истисноии миз низ чунин кунад.

Дар ҳар сурат, таъсир дар он аст, ки блокҳоро камтар аз ҷадвал хондан лозим аст ва ҳама чиз пешакӣ мураттаб карда шудааст. Ин таъсири якдафъаина бо мурури замон бадтар мешавад ва дар ҷадвал навиштани тартиби ҷисмонӣ тақсим карда мешавад.


Кор бо маълумоти LiDAR дар PostgreSQL

Часбҳо роҳи самарабахши нигоҳ доштани маълумотҳои pointcloud дар ҷадвалҳои PostgreSQL мебошанд, ки ҳар як замима аз якчанд нуқтаҳои наздик иборат аст. Ин ба хеле кам шудани сатрҳои маълумот мусоидат мекунад ва амалиётро дар ҷадвал тезтар мекунад. Схемаи часбҳо ва нуқтаҳо дар ҷадвали pointcloud_formats дар пойгоҳи додаҳо тасвир шудааст. Ғайр аз он, васеъкунии pointcloud функсияро барои кор бо ҳарду нуқта ва часбҳо, аз ҷумла истихроҷи хусусиятҳои инфиродӣ ба монанди баландӣ, шиддат ё координатҳо барои ҳар як нуқта ё андозаи қуттии ҳудуди часбҳо пешниҳод мекунад. Агар шумо хоҳед, ки бештар хонед, ин презентатсияи Пол Рэмси дар OpenGEO шарҳҳои воқеан хуб бо мисолҳо барои нуқтаҳо ва часбҳо дорад.

Ҳамаи қадамҳои минбаъда дар дохили контейнери pgpointcloud амалӣ карда мешаванд, ки шумо метавонед фармонҳои зеринро истифода баред -

Мо маълумоти LiDAR-ро бо изи пойгоҳи бинои OSM ҳамроҳ хоҳем кард, то баландиву баландиҳои биноро истихроҷ кунем. Ҳамин тавр, биёед бори аввал ба маълумоти формаи OSM, ки дар боло тавсиф шудааст, ба ҷадвале бо номи osm бор кунем, ки фармони зеринро аз дохили контейнери pgpointcloud-

Мо дархостҳои PostgreSQL -ро барои аксари қадамҳои боқимонда истифода мебарем. Шумо метавонед бо истифодаи фармони зерин ба пойгоҳи додаҳо дастрасӣ пайдо кунед ва ҳамаи дархостҳоро аз дохили пойгоҳи дода иҷро кунед.

Ҳоло, мо омода ҳастем, ки баландиву баландиҳои биноҳоро истихроҷ кунем ва раванди муфассал дар зер оварда шудааст. Раванди шарҳи ба даст овардани баландиҳои бино аз он иборат аст, ки аввал ҳамаи нуқтаҳои LiDAR дар дохили изи бино аз OSM муайян карда шаванд ва пас баландии бино аз ин коллексияи нуқтаҳо ба даст оварда шавад. Тафсири умумӣ барои ба даст овардани баландиҳои бино ин аст, ки аввал баландии заминро дар доираи ҳар як изи бино баҳо диҳед ва онро аз баландии бино хориҷ кунед.

  1. Пеш аз коркарди ҷадвали лидар барои сохтани индекси фазоӣ.
    а. Атрибутҳои ҳар як нуқтаро дар ямоқ дидан кунед. Форматҳои часбҳо ва нуқтаҳо дар формати XML дар ҷадвали алоҳида бо номи pointcloud_formats тавсиф карда мешаванд.
    ИНТИХОБ * АЗ pointcloud_formats
    б. Рӯйхати сутунҳоро дар ҷадвал тамошо кунед. Шумо мебинед, ки часбҳо дар сутуни pa нигоҳ дошта мешаванд.
    д лидар
    в. Шумораи патчҳо ва нуқтаҳои умумии ҷадвалро бинед -
    SELECT Count (*), Sum (PC_NumPoints (pa)) FROM lidar
    г. Барои дархостҳои зудтар дар ҷадвали лидар индекси фазоӣ созед (суръатнокии 40 маротиба мушоҳида мешавад) -
    Эҷоди ИНДЕКС lidar_envelope_pkey ДАР БОРАИ ИСТИФОДАИ GIST (PC_EnvelopeGeometry (pa))
  2. Пеш аз коркарди ҷадвали osm барои сохтани индекси фазоӣ.
    а. Нуқтаҳои берун аз қутти ҳудуди шаҳр метавонанд бо истифода аз саволҳои дар поён овардашуда хориҷ карда шаванд. Ҷойгузории (lng_min, lat_min, lng_max, lat_max) бо ҳаҷми қуттии ҳудуди таваҷҷӯҳ, ки дар он lng ишора ба тӯлонӣ ва лат ба паҳнӣ мансуб аст.
    НЕСТ КУНЕД аз osm КУҶО osm.gid IN (SELECT a.gid FROM osm a WHERE ST_Intersects (a.geom, ST_MakeEnvelope (lng_min, lat_min, lng_max, lat_max, 4326)))
    б. Ман тавсия медиҳам, ки сутуни геометри геоми ба ҳамон SRID (системаи истинодии фазоӣ) -и ҷадвали лидар гузаронида шавад. Минтақаҳои UTM барои мубориза бо минтақаи хурд ва андозагирӣ хеле хубанд, бинобар ин мо геомро ба EPSG: 26910 табдил медиҳем, ки ин ҳамон маълумот барои LiDAR мебошад.
    Тағир додани ҷадвали osm ALTER COLUMN geom TYPE geometry (MultiPolygon, 26910) ИСТИФОДАИ ST_Transform (geom, 26910)
    Эҷоди ИНДЕКС osm_26910_pkey ДАР БОРАИ ИСТИФОДАИ GIST (geom)
  3. Дар osm сутуни нав созед, то нуқтаҳои нуқтаеро дар бар гирад, ки дар ҳар як изи бино ҷойгиранд.
    а. Барои илова кардани сутуни нав ба osm барои нигоҳ доштани часбҳо, аввал намуди часбҳоро дар лидар бо истифода аз d лидар санҷед. Одатан, он pcpatch (1) мебуд. Барои осм барои нигоҳ доштани часбҳо сутуни нав илова кунед
    Тағир додани МИЗИ osm ИЛОВАИ СУТУН pa pcpatch (1)
    б. Ямоқи Pointcloud-ро нигоҳ доред, ки ҳар як полигони изи изофаро пӯшонад. Дархости дар поён овардашуда аввал ҳамаи часбҳоро муайян мекунад, ки ҳар як изи биноро бурида, сипас иттифоқи онҳоро ҳисоб карда мебароянд ва дар ниҳоят чорчӯбаи ямоқи иттифоқӣ бо изи пойро пайдо мекунанд. Интизор шавед, ки ин пурсиш чанд соатро мегирад.
    ТАКМИЛИ osm SET pa = sq.pa АЗ (БО часбҳои AS (SELECT o.gid AS gid, o.geom AS geom, l.pa AS pa from lidar AS l JOIN osm AS o ON PC_INTERSECTS (l.pa, o.geom) )) SELECT gid, PC_INTERSECTION (PC_UNION (pa), geom) AS pa FROM patches GROUP BY gid, geom) AS sQ WHERE osm.gid = sq.gid
  4. Мо баландии биноро ҳамчун омор барои баландии ҳама нуқтаҳои дохили изи бино тавсиф хоҳем кард. Омор метавонад дар асоси парвандаи истифодаи шумо интихоб карда шавад. Дар ин ҷо ман баландиҳои максималӣ, миёна ва миёнаро аз ҳама нуқтаҳо ҳисоб мекунам. Эзоҳ аз арзиши Z дар маълумоти LiDAR баландшавӣ дода мешавад, ки як санади муайяни дар метамаълумоти он пешбинишударо нишон медиҳад (дар ин ҳолат NAD83). Ба ҷои он ки максимумро мустақиман бигирем, он ҳамчун арзиши 99,9th фоизӣ коҳиш дода мешавад, ки эҳтимолияти баландтарро дар натиҷаи аз ҳад зиёд баландии баландтарин коҳиш диҳем.
    а. Сутунҳои мувофиқро ба osm илова кунед -
    Тағир додани ҶАДВАЛ osm САТУН ИЛОВА z_avg НАҚЛИ ДУБАРА NULL, САТУН САФАР ЗАНЕД z_median САФАРИ ДУБАРА NULL, СУТУН ИЛОВА z_max ҲУШДОРИ ДУБУРА
    б. Омори баландиро ҳисоб кунед ва нигоҳ доред
    Навсозии osm SET z_avg = sq.z_avg, z_median = sq.z_median, z_max = sq.z_max FROM (WITH patch AS (SELECT o.gid AS gid, PC_GET (PC_EXPLODE (o.pa), 'Z') AS pt_z FROM osm AS o) SELECT gid, AVG (pt_z) AS z_avg, PERCENTILE_CONT (0.5) WITHIN GROUP (ORDER BY pt_z) AS z_median, PERCENTILE_CONT (0.999) WITHIN GROUP (ORDER BY pt_z) AS z_max BOM patches) .gid = sq.gid
  5. Бо муайян кардани контури бино ва пайваст кардани он бо маълумоти LiDAR баландии заминро ба даст оред.
    а. Ҷадвали наверо бо номи osm_outline ҳамчун нусхаи ҷадвали osm созед, то контури сохти тавлидшударо, ки бо назардошти фарқи байни буферии 2m ва 1m дар атрофи бисёркунҷаҳо сохта шудааст, эҷод кунед.
    СОХТАНИ ҶАДВАЛ osm_outline AS SELECT gid, osm_id, geom FROM osm
    UPDATE osm_outline SET geom = буферӣ FROM (SELECT o.gid, ST_MULTI (ST_DIFFERENCE (ST_MULTI (ST_Buffer (o.geom, 2))), ST_MULTI (ST_BUFFER (o.geom, 1))) AS AS buffer FROM osmline кв дар куҷо osm_outline.gid = sq.gid
    Эҷоди ИНДЕКС osm_outline_pkey ДАР БОРАИ osm_outline ИСТИФОДАИ GIST (geom)
    б. Ямоқи Pointcloud -ро, ки бо контур бурида мешавад, нигоҳ доред. Дархости дар поён овардашуда аввал ҳамаи часбҳоро муайян мекунад, ки ҳар як контурро бурида, сипас муттаҳидшавии онҳоро ҳисоб мекунанд ва дар ниҳоят буриши часби иттифоқро бо контур пайдо мекунанд. Интизор меравад, ки ин пурсиш чанд соатро мегирад.
    ҶАДВАЛИ ДИГАР osm_outline ИЛОВАИ САТУН pa pcpatch (1)
    ОВОЗИ osm_outline SET pa = sq.pa FROM (БО часбҳои AS (SELECT o.gid AS gid, o.geom AS geom, l.pa AS pa АЗ LIDAR AS l JOIN osm_outline AS o ON PC_INTERSECTS (l.pa, o.geom) )) SELECT gid, PC_INTERSECTION (PC_UNION (pa), geom) AS pa FROM patches GROUP BY gid, geom) AS sQ WHERE osm_outline.gid = sq.gid
    в. Арзиши ҳадди ақали Z-ро аз pointcloud, ки контурҳои биноро бурида мегузарад, нигоҳ доред. Ба ҷои он ки минимумро мустақиман бигиранд, он ҳамчун арзиши 1-фоиз барои коҳиш додани имконияти баландтар ба ҳисоб рафтани баландии сатҳи замин ҳисоб карда мешавад.
    ҶАДВАЛИ ДИГАР osm_outline ИЛОВА Сутун z_ground ҲАФЗИ ДУБАРА НУЛ
    UMD osm_outline SET z_ground = sq.z_min АЗ (БО часбҳои AS (SELECT o.gid AS gid, PC_GET (PC_EXPLODE (o.pa), 'Z') AS pt_z FROM osm_outline AS o) SELECT gid, PERCENTILE_CONT (0.01) WITHIN GROUP) (СУПОРИШИ pt_z) AS z_min АЗ часбҳои ГУРӮҲИ БИД гид) AS кв ҶО osm_outline.gid = sq.gid
    г. Баландии заминро ба ҷадвали аслии осм илова кунед ва баландиро ҳамчун фарқи байни баландиҳои пой ва баландиҳои замин ҳисоб кунед.
    Тағир додани ҶАДВАЛ osm САФАРИ ИЛОВА z_ground ДУРАСТА ҲАҚИҚАТИ НУЛ, САТУНИ СОЛОНА НАФАРЕД баландии_avg САФАРАИ ДУБУРА НУЛ, илова кардани сутуни баландӣ_медиан САФАРИ дукарата НУЛ, САТУН САТУНИ баландӣ_max ҲУШИ ДУБАРА
    Навсозии osm AS o SET z_ground = oo.z_ground АЗ osm_outline oo КУҶО o.gid = oo.gid
    UPDATE osm SET height_avg = (z_avg - z_ground), height_median = (z_median - z_ground), height_max = (z_max - z_ground)

Ана тамом! You have successfully calculated the building elevations, ground elevations, and building heights for each building and all this data is stored in the osm table along with the building footprint geometry for each building.

If you would like to visualize the elevations and heights, you can export your data to a Shapefile. First exit the database using q , and then run the following command to export the osm table to the file named sanfrancisco_buildings.shp —

I imported the Shaepefile into QGIS, and used the Qgis2threejs plugin to create an interactive output as shown at the top of this article. The plugin allows showing both ground elevations and buildings in 3D, and the visualization can be accessed easily from any browser.

Interested in learning more about our technology? Head over to our website or our Medium page to read about some of our recent projects!