|
|
|
PostGIS. ST_Intersection выдает ошибку.
|
|||
|---|---|---|---|
|
#18+
TopologyException: found non-noded intersection between LINESTRING (46.9421 62.5285, 46.942 62.5286) and LINESTRING (46.9418 62.5288, 46.9422 62.5284) at 46.942 62.5286. Подскажите пожалуйста, как это исправить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 09:01:24 |
|
||
|
PostGIS. ST_Intersection выдает ошибку.
|
|||
|---|---|---|---|
|
#18+
ну и как вы добились такого результата ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 13:57:26 |
|
||
|
PostGIS. ST_Intersection выдает ошибку.
|
|||
|---|---|---|---|
|
#18+
geom1 - полигон, geom2 - геометрия дороги и разных объектов вдоль нее. Нужно вытащить все, что входит в полигон. select st_intersection(geom1,geom2); Ответ сервера: NOTICE: TopologyException: found non-noded intersection between LINESTRING (46.9421 62.5285, 46.942 62.5286) and LINESTRING (46.9418 62.5288, 46.9422 62.5284) at 46.942 62.5286. Похоже на две практически идентичные линии первой и второй геометрии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 14:42:55 |
|
||
|
PostGIS. ST_Intersection выдает ошибку.
|
|||
|---|---|---|---|
|
#18+
да это понятно, что полигоны и геометрии разные, запрос давай! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 14:46:28 |
|
||
|
PostGIS. ST_Intersection выдает ошибку.
|
|||
|---|---|---|---|
|
#18+
Ну, если вы настаиваете...:) Вот вырезка из функции (на каких то дорогах работает нормально, на каких то выдает эту ошибку) : DECLARE axis GEOMETRY; newGeo GEOMETRY; ortGeo GEOMETRY; pt1 GEOMETRY; pt2 GEOMETRY; newPt1 GEOMETRY; newPt2 GEOMETRY; geom1 GEOMETRY; geom2 GEOMETRY; poly GEOMETRY; res_geom GEOMETRY; dx1 decimal; dy1 decimal; dx11 decimal; dy11 decimal; dx2 decimal; dy2 decimal; dx22 decimal; dy22 decimal; alfa decimal; L1 double precision; L2 double precision; BEGIN --строим полигон путем вырезания нужного куска оси дороги и транслирования этого куска в обе стороны от оси newGeo := ST_Force_2D(st_mline_substring(axis, L1, L2)); ortGeo := ST_Transform(newGeo, 3644); pt1 := ST_PointN(ortGeo, 1); pt2 := ST_PointN(ortGeo, ST_NumPoints(ortGeo)); alfa := (pi() / 2.0) - ST_azimuth(pt1, pt2); dx1 := -d1 * sin(alfa); dy1 := d1 * cos(alfa); dx2 := -d2 * sin(alfa); dy2 := d2 * cos(alfa); newPt1 := ST_Transform(ST_Translate(pt1, dx1, dy1), 4326); newPt2 := ST_Transform(ST_Translate(pt1, dx2, dy2), 4326); dx11 := ST_X(newPt1) - ST_X(ST_PointN(newGeo, 1)); dy11 := ST_Y(newPt1) - ST_Y(ST_PointN(newGeo, 1)); dx22 := ST_X(newPt2) - ST_X(ST_PointN(newGeo, 1)); dy22 := ST_Y(newPt2) - ST_Y(ST_PointN(newGeo, 1)); geom2 := st_reverse(ST_Translate(newGeo, dx22, dy22)); geom1 := ST_AddPoint(ST_Translate(newGeo, dx11, dy11),ST_PointN(geom2, 1)); geom2 := ST_AddPoint(geom2,ST_PointN(geom1, 1)); poly := ST_Transform(st_makepolygon(st_linemerge(st_collect(geom1,geom2))),4326); --геометрия дороги select geoloc from some_table where road_id=id into res_geom; if st_intersects(res_geom,poly) res_geom := ST_Transform(st_intersection(res_geom,poly),3752); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 15:10:23 |
|
||
|
PostGIS. ST_Intersection выдает ошибку.
|
|||
|---|---|---|---|
|
#18+
Мама Тереза, Код: sql 1. выдает без нотайсов Код: sql 1. получается пересечение есть, только в вашем случае оно "неправильное", тут вот ссылка есть What is a “non-noded intersection”? правда я языками не владею, нифига не понял, что имеется ввиду, может вы разберетесь, ну и объясните, очень интересно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 15:37:59 |
|
||
|
PostGIS. ST_Intersection выдает ошибку.
|
|||
|---|---|---|---|
|
#18+
Тут еще поискал по инету, такая ошибка вылазит когда геометрия битая, чаще всего полигон, в вашем случае это скорее всего poly, попробуй poly обернуть ST_Buffer(poly,0) функция полигон не изменит, но ошибки исправит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 16:04:41 |
|
||
|
PostGIS. ST_Intersection выдает ошибку.
|
|||
|---|---|---|---|
|
#18+
bochkov, спасибо, ST_Buffer частично помог (некоторые запросы выполнились :) ). А в приведенной вами ссылке говорится, что проблема возможно в том, что геометрии находятся в разных пространствах, либо в том, что при нахождении расстояния между двумя точками и последующем делении на это расстояние (зачем?) произошло деление на ноль, и если удастся поймать момент этого деления, то можно как-нибудь обойти эту проблему, как не сказано. Еще приводится ссылка на форум, где парень пытается найти формулу для нахождения точки на линии на заданном расстоянии, он наверно не знает, что такие формулы давно уже есть и их можно использовать на клиенте для нахождения пересечения, но мне то надо на сервере все сделать. Но спасибо за подсказку, буду смотреть в сторону полигона. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 16:32:16 |
|
||
|
PostGIS. ST_Intersection выдает ошибку.
|
|||
|---|---|---|---|
|
#18+
аа, вот что) ST_Buffer все исправил) забыла просто, что у меня там не одна функция с этим полигоном используется)) Короче говоря, все получилось, спасибо большое дорогой bochkov :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 16:39:20 |
|
||
|
PostGIS. ST_Intersection выдает ошибку.
|
|||
|---|---|---|---|
|
#18+
Хорошо было бы, посмотреть на этот неправильный полигон, думаю что этот полигон с одним из углов в 0 градусов, фактически это линия примыкающая к полигону. Даже возможно полигон и есть линия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 09:14:22 |
|
||
|
PostGIS. ST_Intersection выдает ошибку.
|
|||
|---|---|---|---|
|
#18+
bochkov, не видела последнее сообщение. Вот одна из ошибок: NOTICE: TopologyException: found non-noded intersection between LINESTRING (40.6684 64.6305, 40.668 64.6306) and LINESTRING (40.6684 64.6305, 40.6688 64.6305) at 40.6684 64.6305 Вот этот полигон: "POLYGON((40.6647939046364 64.623045391451,40.6648103549161 64.6230651288711,40.6649533537913 64.6232339482022,40.6650976092605 64.6234025032637,40.6652359990784 64.6235719661173,40.6653826076993 64.6237401709392,40.6655246811789 64.6239094441881,40.6656607685326 64.6240787848351,40.6657953539172 64.624249189279,40.6659313394062 64.6244192010238,40.6660676681864 64.6245883872626,40.66620254583 64.6247564996181,40.6663361884291 64.6249284983862,40.6664743282465 64.6250981922878,40.6666087256133 64.6252681078007,40.6667370189333 64.6254389032911,40.6668708245959 64.6256088730858,40.6670058343035 64.625778716716,40.6671393559089 64.6259481454307,40.6672720927171 64.6261186019032,40.6674053740143 64.626288419569,40.6675398275003 64.626458474551,40.6676702519258 64.6266285599561,40.6678022102965 64.6267980030247,40.6679334141813 64.6269682953991,40.6680654310518 64.6271375587499,40.6681935065433 64.6273077498665,40.6683227778607 64.6274771422687,40.6684506277131 64.6276474811758,40.668578940197 64.6278173214423,40.6687084636695 64.6279866081554,40.6688378185778 64.6281560383708,40.6689647166117 64.628325957065,40.6690907567381 64.6284960063578,40.6692153730492 64.6286655136051,40.6693426763197 64.6288351908479,40.6694684730738 64.6290036721678,40.6695966453183 64.6291722102083,40.6697310490138 64.6293408772383,40.6698268859716 64.629510601992,40.6698405840605 64.6296060080317,40.6698197134167 64.629683260026,40.6697417767464 64.6298525502677,40.6695717603334 64.630019381853,40.6693621460493 64.6301709621985,40.6690995214262 64.6303032900833,40.6687764995296 64.6304156870113,40.6684148144411 64.6304987223327,40.6680126658437 64.6305532854813,40.6676082885006 64.6305687894795,40.6671795643037 64.6305749423184,40.6667610104078 64.6305765937601,40.6663395155213 64.6305760613276,40.6662922733854 64.6305758029833,40.6683535983605 64.6305003003282,40.6684008404964 64.6305005586725,40.6688223353829 64.630501091105,40.6692408892788 64.6304994396633,40.6696696134757 64.6304932868244,40.6700739908188 64.6304777828262,40.6704761394162 64.6304232196776,40.6708378245047 64.6303401843561,40.6711608464013 64.6302277874282,40.6714234710244 64.6300954595434,40.6716330853085 64.6299438791979,40.6718031017215 64.6297770476126,40.6718810383918 64.6296077573709,40.6719019090355 64.6295305053766,40.6718882109467 64.6294350993369,40.6717923739889 64.6292653745832,40.6716579702934 64.6290967075532,40.6715297980489 64.6289281695127,40.6714040012947 64.6287596881928,40.6712766980243 64.62859001095,40.6711520817132 64.6284205037027,40.6710260415868 64.6282504544099,40.6708991435529 64.6280805357157,40.6707697886446 64.6279111055003,40.6706402651721 64.6277418187872,40.6705119526882 64.6275719785207,40.6703841028358 64.6274016396136,40.6702548315184 64.6272322472114,40.6701267560269 64.6270620560948,40.6699947391564 64.626892792744,40.6698635352716 64.6267225003696,40.6697315769009 64.626553057301,40.6696011524754 64.6263829718959,40.6694666989894 64.6262129169139,40.6693334176922 64.6260430992481,40.669200680884 64.6258726427756,40.6690671592786 64.6257032140609,40.668932149571 64.6255333704307,40.6687983439084 64.625363400636,40.6686700505884 64.6251926051456,40.6685356532215 64.6250226896327,40.6683975134042 64.624852995731,40.6682638708051 64.624680996963,40.6681289931614 64.6245128846075,40.6679926643813 64.6243436983687,40.6678566788923 64.6241736866239,40.6677220935077 64.62400328218,40.667586006154 64.623833941533,40.6674439326744 64.6236646682841,40.6672973240535 64.6234964634622,40.6671589342355 64.6233270006086,40.6670146787664 64.6231584455471,40.6668716798912 64.622989626216,40.6668552296115 64.6229698887959,40.6647939046364 64.623045391451))" Если сделать st_buffer(poly,0), получается линия: "LINESTRING(40.6658245682284 64.6230076429058,40.6658410185081 64.6230273803259,40.6659840173833 64.6231961996569,40.6661282728524 64.6233647547184,40.6662666626704 64.623534217572,40.6664132712913 64.623702422394,40.6665553447709 64.6238716956428,40.6666914321246 64.6240410362898,40.6668260175092 64.6242114407337,40.6669620029981 64.6243814524786,40.6670983317783 64.6245506387173,40.667233209422 64.6247187510728,40.6673668520211 64.6248907498409,40.6675049918384 64.6250604437425,40.6676393892053 64.6252303592555,40.6677676825252 64.6254011547459,40.6679014881878 64.6255711245405,40.6680364978955 64.6257409681707,40.6681700195009 64.6259103968854,40.6683027563091 64.6260808533579,40.6684360376063 64.6262506710237,40.6685704910922 64.6264207260057,40.6687009155178 64.6265908114109,40.6688328738884 64.6267602544794,40.6689640777733 64.6269305468538,40.6690960946437 64.6270998102046,40.6692241701353 64.6272700013212,40.6693534414526 64.6274393937234,40.669481291305 64.6276097326305,40.669609603789 64.627779572897,40.6697391272615 64.6279488596101,40.6698684821697 64.6281182898256,40.6699953802037 64.6282882085197,40.67012142033 64.6284582578126,40.6702460366412 64.6286277650598,40.6703733399116 64.6287974423026,40.6704991366658 64.6289659236226,40.6706273089102 64.629134461663,40.6707617126057 64.6293031286931,40.6708575495636 64.6294728534468,40.6708712476524 64.6295682594864,40.6708503770087 64.6296455114807,40.6707724403383 64.6298148017225,40.6706024239253 64.6299816333077,40.6703928096412 64.6301332136532,40.6701301850182 64.6302655415381,40.6698071631216 64.630377938466,40.669445478033 64.6304609737875,40.6690433294356 64.630515536936,40.6686389520926 64.6305310409342,40.6682102278956 64.6305371937731,40.6677916739998 64.6305388452149,40.6673701791133 64.6305383127823,40.6673229369773 64.630538054438)" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2013, 09:13:18 |
|
||
|
PostGIS. ST_Intersection выдает ошибку.
|
|||
|---|---|---|---|
|
#18+
пока не могу проверить, в командировке я, домой приеду отпишусь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2013, 18:15:08 |
|
||
|
PostGIS. ST_Intersection выдает ошибку.
|
|||
|---|---|---|---|
|
#18+
postgis 2.0.3 в вашем случае poly получился перекрученным полигоном, как петля мебиуса, и разделен на 2 части маленькую и большую после st_buffer маленькая часть осталась, большая исчезла Код: sql 1. а у вас LINE получился, наверное postgis версия подругому работает, ну а вообще лучше конечно процедуру переделать, я так понимаю это какойто буфер должен получится из дороги, может стандартными функциями воспользоваться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2013, 07:57:05 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38469350&tid=1998422]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
28ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 320ms |

| 0 / 0 |
