2011-09-14 2 views
1

아마도 분명히 알 수있는 것을 게시 해 주셔서 죄송합니다. 데이터베이스 경험이 많지 않습니다.
Table.fruit
ID 유형 Xcoordinate y 좌표 맛의 과일 향이
1 애플 3 3 좋은 1 : - 어떤 도움을 크게 감상 할 수 있지만, 기억, 나는이 같은 테이블이대용량 데이터베이스 테이블에서 가장 가까운 이웃 검색 - SQL 및/또는 ArcGis

:-) 초보자이야 중간 나쁜, 5
2 오렌지 5 사 2,9
3 애플 7 77 1,4
4 바나나 0,1
6 애플 3 (38) 좋은 9 15 중간 4 69 나쁜 9,5
5 배 - 5,8
7 사과 1 4 좋은 3애플 1,344 1,388 바트 (5)
... ... ... ... ... ...
1958 바나나 759 1239 바나나 (15) (99) 나쁜 6,8
9 배 298 18789 중간 10,01
... ... ... ... ... ...
(8) 좋은 일
1959 바나나 3 4 보통 5,2 내가 필요

: 나에게

n 개의을 제공하는 테이블 (예 : N = 5) 원래 테이블의 각 지점에 가장 가까운 지점을 포함 거리 Table.5nearest (거리가 가짜 임에 유의하십시오). 결과 테이블에는 ID1, ID2 및 ID1과 ID2 사이의 거리가 있습니다 (이미지를 아직 게시 할 수 없습니다. 불행하게도). 1,959

ID.Fruit1 ID.Fruit2 거리 1 1,959 ... ... ... 1,000 1,958 400 1000 Xxx Xxx ... ...

(이상적으로 SQL/데이터베이스 관리에서) 또는 ArcGis 또는 이와 비슷한 방법으로 어떻게 할 수 있습니까? 어떤 아이디어? 불행히도 내 테이블에는 15000 개의 데이터 세트가 포함되어 있으므로 n = 5를 선택하면 결과 테이블에 75000 개의 데이터 세트가 생깁니다. 대단히 감사드립니다.

편집 :

지금까지 의견을 보내 주셔서 감사합니다. 저가 조금 확장 해 보자. 첫 번째 제안 된 방법은 거대한 파일 크기를 렌더링하는 전체 테이블의 무차별 한 스캔 또는 일종의 충돌 일 가능성이있다? 이제 과일은 가짜 일 뿐이며 실제 테이블에는 수정 ID, 공칭 속성 ("과일 유형"등), X 및 Y 공간 열 (Gauss-Krueger에서) 및 일부 숫자 속성이 포함됩니다. 자, 여기에 "경계 상자"를 코딩하는 방법이 있다고 생각합니다. 따라서 거리 계산은 문제의 내 지점 (1이라고 가정 해 봅시다) 및 특정 가장자리 길이를 갖는 사각형 내의 모든 다른 지점에 대해 수행됩니다. 필자는 (원격으로) 코딩하거나 쿼리 할 수는 있지만, 내 ID 열의 모든 포인트에 대해 스크립트를 수행하려면 어떻게해야합니까? 내가 이해하는 방식으로,이 중 하나는 "table.Fruit"의 각 레코드에 대한 "부제"를 추가해야합니다. 즉, 거리 필드가 추가 된 레코드/점 주위의 모든 점을 포함합니다. "Table.5nearest"). 나는 이것이 일종의 이해가되기를 바랍니다. 어떤 아이디어?고마워요

+0

[SQL Sever Express 2008] (http://msdn.microsoft.com/en-us/evalcenter/ff978728.aspx?wt.mc_id=MEC_36_1_5) 옵션이 있습니까? 그렇다면 http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/sql-server-2008-proximity-search-withthth 또는 http://blogs.lessthandot.com/을 읽을 수 있습니다. – Fionnuala

답변

1

모든 과일 사이의 모든 거리를 얻는 것은 상당히 간단합니다. 액세스 SQL에서 (당신은 일하러 가야 사방에 괄호를 추가해야 할 수도 있지만 : P) :

select fruit1.id, 
     fruit2.id, 
     sqr(((fruit2.xcoordinate - fruit1.xcoordinate)^2) + ((fruit2.ycoordinate - fruit1.ycoordinate)^2)) as distance 
from  fruit as fruit1 
join  fruit as fruit2 
on  fruit2.id <> fruit1.id 
order by distance; 

액세스에 대한 "상위 N"기록이를 제한 할 필요가 세련이 있는지 모르겠어요 각 과일; 따라서이 쿼리는 레코드 세트에서 2 억 2 천 5 백만 레코드를 반환합니다 (또는 시도하는 동안 충돌이 발생할 가능성이 큽니다)!

+0

더 나은 해결책은 특정 범위 내의 모든 인접한 과일을 반환하는 것일 수 있습니다. 액세스는'sqr ((fruit2.xcoordinate - fruit1.xcoordinate)^2) + ((fruit2.ycoordinate - fruit1.ycoordinate)^2)) Xophmeister

+0

나는 또한 당신이 당신의 데이터를 더 잘 정상화시킬 수 있다고 언급했다. fruit.type 필드는 fruit_type 테이블에 대한 참조로 변환되어야합니다. fruit.taste 필드에도 마찬가지입니다. – Xophmeister

+0

나는 정상화를 위해 모두 다했지만이 쿼리가 필요로하는 마지막 것은 또 다른 조인이다. 과일 목록을 관리하는 것은 그다지 어렵지 않고 그 이름은 거의 변하지 않습니다. – JeffO

1

지금까지 의견을 보내 주셔서 감사합니다. 그동안 ArcGis 용 애드 인 (add-in) 인 Hawth's Tools을 미리 제작 해 놓았습니다. 이것은 x와 y 값을 가진 임의의 점 특징에 가장 근접한 n 개의 이웃을 찾는 바람과 같이 작용합니다. 그래서 비슷한 문제와 질문을 가진 사람을 도울 수 있기를 바랍니다. 그러나 이제는 더 많은 데이터베이스 관련 문제가 있습니다. 내 모든 조합 목록을 제공하기 위해 DBMS (액세스 선호)를 얻을 수있는 아이디어가 있습니까? 즉, 공간에 15,000 개의 과일이 배열 된 포인트 기능이 있다면 어떻게 모든 "순수 바나나 이웃"(사과, 레몬 등) 및 다른 모든 조합을 얻을 수 있습니까? 건배와 기원합니다.

관련 문제