2013-08-01 1 views
2

OpenLayers와 Postgis 데이터베이스 레이어에서 그릴 다각형의 교차 부분을 수행 할 때 잘못된 결과가 나타나는 것 같습니다.교차 교차 레이어가 빈 교차로를 반환합니다.

일부 계층에서는 교차가 올바르게 작동합니다. 나는 작물 분야를 대표하는 다각형의 층으로 삼각형을 교차하는 경우 예를 들어, 나는 다음을 얻을 :

enter image description here

내 앱이 위의 결과를 생성하기 위해 생성하는 쿼리는 다음과 같습니다

SELECT ST_AsText(ST_Intersection(%(geometries_0)s::geometry, %(geometry)s::geometry)) 

POLYGON((-104.84928345939991 40.518951354186285,-104.82319093011056 40.51953858115158,-104.83700967095314 40.50707521626648,-104.84928345939991 40.518951354186285)) 

geometry 작물 분야의 내 층, 잘 알려진 테 : geometries_0

내 삼각형 XT :

enter image description here

쿼리는 동일합니다 : 나는 다른 레이어와 같은 쿼리를 수행하는 경우에는

MULTIPOLYGON(((-104.841309611298 40.5075331998226,-104.84173356681 40.5069932245841,-104.842041204329 40.50640946683,-104.842224948796 40.5057962996657,-104.842280275816 40.5051688207073,-104.842205823049 40.5045424803865,-104.842003423773 40.5039327015263,-104.841678061729 40.5033544995574,-104.841237748411 40.502822112724,-104.840693325791 40.5023486513933,-104.840058199365 40.5019457751149,-104.839348008051 40.5016234053897,-104.838580239118 40.5013894812384,-104.837773797582 40.5012497635973,-104.836948540713 40.501207693373,-104.836124789073 40.5012643066572,-104.83532282616 40.5014182091969,-104.834562398965 40.5016656107496,-104.833862231727 40.5020004184754,-104.833239564888 40.5024143870601,-104.832709730574 40.5028973218633,-104.83228577506 40.5034373300773,-104.831978137541 40.5040211136997,-104.831794393074 40.5046342970926,-104.831739066055 40.5052617810515,-104.831813518821 40.5058881146554,-104.832015918097 40.5064978757385,-104.832341280141 40.5070760506105,-104.83278159346 40.5076084036796,-104.833326016079 40.5080818278834,-104.833961142505 40.5084846673069,-104.834671333819 40.5088070040565,-104.835439102753 40.5090409023397,-104.836245544289 40.5091806037522,-104.837070801158 40.5092226689759,-104.837894552799 40.5091660624086,-104.83869651571 40.509012177646,-104.839456942906 40.5087648031902,-104.840157110143 40.5084300292289,-104.840779776982 40.5080160977709,-104.841309611298 40.5075331998226))) 

("토양"), 나는 빈 결과를 얻을 수

다각형 geometries_0
SELECT ST_AsText(ST_Intersection(%(geometries_0)s::geometry, %(geometry)s::geometry)) 

즉 중첩해야

01,230,855,475,

geometry 위의 쿼리에서 자르기 필드와 비슷한 토양, 표현 계층 : 나는 잘 알려진 텍스트 데이터베이스 레이어를 변환 할 PostGIS와 ST_AsText 기능을 사용

MULTIPOLYGON(((-104.939716 40.258166,-104.939775 40.258174,-104.939963 40.258159,-104.940159 40.258065,-104.940039 40.257671,-104.939917 40.25749,-104.939928 40.257419,-104.94003 40.257404,-104.940265 40.257641,-104.940632 40.257902,-104.940826 40.258061,-104.941051 40.258188,-104.941123 40.258235,-104.941205 40.258283,-104.941246 40.258275,-104.941287 40.258212,-104.941186 40.258094,-104.941186 40.258007,-104.941167 40.257921,-104.941105 40.257858,-104.941044 40.257786,-104.941045 40.257716,-104.941127 40.257676,-104.94122 40.257653,-104.94141 40.257731,-104.941559 40.257671,-104.941255 40.257181,-104.940857 40.256794,-104.940644 40.256478,-104.940319 40.255997,-104.940003 40.255728,-104.939676 40.255561,-104.939419 40.255544,-104.938895 40.255529,-104.938287 40.255512,-104.938046 40.255528,-104.937733 40.255549,-104.937322 40.255533,-104.937012 40.255577,-104.936947 40.255593,-104.936623 40.255774,-104.936581 40.255924,-104.93658 40.256042,-104.936661 40.256223,-104.93671 40.256436,-104.936842 40.256618,-104.937262 40.256753,-104.937662 40.256818,-104.937897 40.257,-104.938181 40.25745,-104.938374 40.257742,-104.938465 40.257931,-104.938782 40.258051,-104.939121 40.258092,-104.939439 40.258133,-104.939716 40.258166))) 

을, 그리고 확실하게 확인 모든 레이어에는 EPSG : 4326 프로젝션이 있습니다 (Find_SRID 함수 사용).

왜 한 레이어 (자르기 필드)가 올바르게 교차하고 다른 레이어 (토양)가 교차하지 않습니까? 동일한 결과를 사용하여 지오메트리 대신 지리 정보를 사용하여 동일한 쿼리를 시도했습니다.

+0

교차 게시 금지 : http://gis.stackexchange.com/questions/67679/intersecting-layers-returns-empty-collection-despite-visible-intersection –

답변

1

일부 디버깅 후 (일부 helpful troubleshooting steps에 추가) 내 토양 레이어에 대해 ST_AsText 함수를 사용하여 WKT 모양을 잘못 작성하고 있음을 알게되었습니다. 결과적으로 내 교차점은 내 토양 레이어에 포함 된 전체 지오메트리 집합에 적용되지 않았습니다.

현재 내 토양 레이어에는 SSURGO soil map units의 하위 세트가 포함되어 있으며 그 중 일부는 실제로 기하학을 포함하지 않습니다.제대로 모든 null 이외의 형상을 나타내는 텍스트 문자열을 구축하기 위해, 나는 명시 적으로 WKT에 결과를 변환하기 전에 형상에 가입하는 데 필요한 :

SELECT ST_AsText(ST_Union(the_geom)) FROM schema.layer 

트릭을했다.

5

교차하지 않기 때문에 빈 컬렉션을 반환합니다. 사실, 그들은 서로 32km 떨어져 있습니다.

SELECT ST_Intersects(A, B), ST_Distance(A, B)/1000 AS dist_km 
FROM (
SELECT 
    'POLYGON((-104.84627938530097 40.54511058649626,-104.83460641167578 40.545175808723876,-104.84070039055733 40.537283458057615,-104.84627938530097 40.54511058649626))'::geography AS A, 
    'MULTIPOLYGON(((-104.939716 40.258166,-104.939775 40.258174,-104.939963 40.258159,-104.940159 40.258065,-104.940039 40.257671,-104.939917 40.25749,-104.939928 40.257419,-104.94003 40.257404,-104.940265 40.257641,-104.940632 40.257902,-104.940826 40.258061,-104.941051 40.258188,-104.941123 40.258235,-104.941205 40.258283,-104.941246 40.258275,-104.941287 40.258212,-104.941186 40.258094,-104.941186 40.258007,-104.941167 40.257921,-104.941105 40.257858,-104.941044 40.257786,-104.941045 40.257716,-104.941127 40.257676,-104.94122 40.257653,-104.94141 40.257731,-104.941559 40.257671,-104.941255 40.257181,-104.940857 40.256794,-104.940644 40.256478,-104.940319 40.255997,-104.940003 40.255728,-104.939676 40.255561,-104.939419 40.255544,-104.938895 40.255529,-104.938287 40.255512,-104.938046 40.255528,-104.937733 40.255549,-104.937322 40.255533,-104.937012 40.255577,-104.936947 40.255593,-104.936623 40.255774,-104.936581 40.255924,-104.93658 40.256042,-104.936661 40.256223,-104.93671 40.256436,-104.936842 40.256618,-104.937262 40.256753,-104.937662 40.256818,-104.937897 40.257,-104.938181 40.25745,-104.938374 40.257742,-104.938465 40.257931,-104.938782 40.258051,-104.939121 40.258092,-104.939439 40.258133,-104.939716 40.258166)))'::geography AS B 
) AS data; 

st_intersects |  dist_km 
---------------+------------------ 
f    | 32.1052124928391 

지도에 잘못된 부분이 있습니다.