나는 호버 이벤트에서 각 다각형을 다른 색상으로 표시 할 수 있도록하기 위해 그러한 데이터를 영원히로드하지 않고도 웹 맵 을 만들고 벡터 다각형을 오버레이 할 수있는 견고한 솔루션을 찾고 있습니다 .
내가 아는 한 캔버스, SVG, 플래시 중 하나를 통해이를 달성 할 수있는 3 가지 옵션이 있습니다.
플래시는 가장 빠른 렌더링과 가장 깨끗한 디스플레이를 제공하는 것처럼 애플 아이폰 / 아이 패드에서 작동한다면 최상의 솔루션 인 것 같습니다. 캔버스가 두 번째 최선의 선택 인 것처럼 보이지만지도에 수백 개의 다각형이 표시되는 경우 SVG가 렌더링하는 데 시간이 더 오래 걸립니다.
나는 이 문제에 대한 해결책을 찾는 데 거의 희망을 잃었 지만 오늘 GISCloud http://www.giscloud.com (현재 무료 가입 베타 버전) 이라는 회사를 발견했습니다 .
이 회사는 SOMEHOW가 수백 개의 벡터를 거의 실시간으로지도에 렌더링하는 놀라운 방법을 알아 냈습니다. 나는 그들의 접근 방식에 놀랐고 커뮤니티에 대한 나의 질문은 전단지, 오픈 레이어, 왁스와 같은 기존 기술에 사용하기 위해 접근 방식을 복제 할 수있는 방법과 관련이 있습니다.
이 놀라운 데모를보고 자신을 살펴보십시오 : http://www.giscloud.com/map/284/africa
페이지에서 다각형 위로 마우스를 가져 가서 확대 / 축소 컨트롤을 테스트하여 이러한 다각형이 실제로 벡터인지 확인하십시오.
Firebug로 요청을 살펴본 결과 맵에서 특정 json 파일을 요청하고 있다는 사실을 알았습니다. 확대 / 축소 수준 / 영역에 따라 여러 개의 json 파일이 요청 된 것 같습니다.
여기서 giscloud가 페이지에 데이터를로드하면 벡터 위로 마우스를 가져 가면 새 요청을 만들지 않고 즉시 색상이 변경됩니다.
예 :
- http://cft1.giscloud.com/t/1316509973/map284/layer1156/3/3/3.json
- http://cft1.giscloud.com/t/1316509973/map284/layer1156/3/5/3.json
- http://cft1.giscloud.com/t/1316509973/map284/layer1156/3/4/4.json
- http://cft1.giscloud.com/t/1316509973/map284/layer1156/3/3/4.json
- http://cft1.giscloud.com/t/1316509973/map284/layer1156/3/5/4.json
URL 구조가 표준 타일링 서비스 논리를 따르는 것으로 가정합니다 (예 : 3 번째 폴더부터 마지막 폴더까지 확대 / 축소 수준 ...).
어쨌든 나는이 json 파일의 실제 데이터를 분석했으며 그들이 사용하는 논리는 이러한 데이터 값을 기반으로 벡터를 생성하는 일부 유형의 논리를 따릅니다.
- 너비 / 높이 : 각 json 요청에서 제공되는 데이터의 너비와 높이를 정의합니다.
- 픽셀 : 여기에서 어떻게 든 일반화 된 포인트 레벨에 대한 일반적인 x / y 픽셀 좌표와 관련이 있다고 가정하고 픽셀 값을 정의합니까? 그들은 어떻게 든 줌 레벨에 따라 영역을 자동으로 단순화하는 방법을 가지고 있다고 생각합니다. 나는 픽셀 좌표를 사용한다고 가정하고 있는데, 위도 / 경도 데이터와 비교하여로드 해야하는 데이터의 크기를 크게 줄이고 있다고 생각합니다.
- 스타일 : 여기에서 두 개의 RGB CSS 값을 정의합니다. 다각형 파일 색상을 나타내는 "F"및 다각형 테두리 색상을 나타내는 "S"
- geom : 여기에서지도 컨테이너 창을 기반으로 데이터가 정의되는로드되는 타일 내에서 각 다각형을 정의하는 방법을 추측하고 있습니다. 또한 흥미로운 점은 각 항목에 "S"값이 있고 이는 선택적 속성 또는 기능 링크 값으로 사용되는 것으로 가정하고 각 항목 끝에는 벡터 ID 당 특정 ID를 정의하는 영역이 있습니다. 내가 추측하고있는 레이어 ID는 호출되는 각 json 타일 요청의 데이터를 어떻게 든 결합하는 데 사용됩니다.
또한 요청 된 타일에로드 해야하는 데이터의 크기에 따라 각 타일에로드 해야하는 데이터를 자동으로 결정하고 분할하는 방법을 어떻게 든 알아 냈습니다.
다음은 이러한 요청 중 하나를 추출한 것입니다.
{"width":256,"height":256,"tile":
{"pixels":
[0,6461,-1,0,5,148,0,509,-1,10715,-1,1,-1,251,-1,1,-1,1,-1,251,-2,3,-1,255,-1,249,-2,5,-2,247,-1,509,-3,251,-1,2,-2,253,-2,252,-2,254,-1,255,-1,254,-1,255,-1,1276,-2,13,-1,233,-1,2,-1,253,-1,1,-1,255,-1,247,-1,1306,-1,1533,-1,1269,-1,1276,-1,2303,-1]},
"styles":
[{"f":"rgb(99,230,101)","s":"rgb(5,148,0)","lw":"0"}],
"geom":
[
{"s":0,"p":[4,143,5,144,3,146,1,146,2,143,4,143],"c":"layer1156_5098"},
{"s":0,"p":[-2,143,0,140,2,141,2,144,1,146,-2,144,-2,143],"c":"layer1156_5067"},
{"s":0,"p":[7,143,5,144,4,143,2,143,2,141,5,138,6,139,5,141,7,143],"c":"layer1156_5051"},
{"s":0,"p":[10,141,11,137,12,137,14,137,12,142,9,143,9,142,10,141],"c":"layer1156_5041"},
{"s":0,"p":[1,136,0,140,-2,143,-2,136,1,136],"c":"layer1156_5038"},
{"s":0,"p":[8,143,5,141,5,137,8,136,10,137,10,141,8,143],"c":"layer1156_5033"},
{"s":0,"p":[5,137,2,141,0,140,1,136,1,136,2,135,3,136,5,137],"c":"layer1156_5028"},
{"s":0,"p":[10,134,12,136,11,138,8,135,10,134],"c":"layer1156_5020"},
{"s":0,"p":[-2,133,0,136,-2,136,-2,133],"c":"layer1156_5005"},
{...}
...
]
}
postgis를 사용하여 동일한 (또는 유사한) 유형의 속도를 어떻게 복제 할 수 있습니까?