문제

관심에서 쓰는 단순한 탐색 응용 프로그램으로 애완 동물 프로젝트입니다.후에 주위를 검색에 대한 무료지도 데이터가 정착에 미국 인구조사국 TIGER 2007 인/파일지도 데이터입니다.데이터 분 zip 파일로에 대한 개별 군과 단일 군도-데이터에 대한 내 영역입니다.

무엇을 할 수있는 가장 좋은 방법이 될 것이를 읽고 이 지도에서 데이터로 사용 가능한 형식으로?

어떻게 해야 하:

  • 이러한 파일에서 읽
  • 분석들-일반현 또는 일부 라이브러리는 이미 이러한 구문 분석 shape 파일을?
  • 부하으로 데이터를 내 응용 프로그램-해야 하드 포인트를 직접적으로 어떤 큰 데이터 구조를 메모리에서?를 사용하여 데이터베이스?나는 필요 없음에 대한 지속성을 닫으면 응용 프로그램의 지도 데이터입니다.사용자를 로드할 수 있습 쉐이프파일을 다시합니다.

무엇을 할 수있는 가장 좋은 방법이 될 것이를 렌더링하는 지도 한 번 읽고 있습니다.에서 파일 데이터?

최고 싶을 읽을 수 있에 군도 데이터 파일을 렌더링하는 모든 폴리 라인 화면에 허용 회전 및 스케일링을 제공합니다.

어떻게 해야 하:

  • 변환 lat/lon 포인트를 화면 좌표?-으로 지금까지 내가 아는 쉐이프파일 사용하여 위도 경도한 점이다.그렇게 분명히 나를 변환하는 이들은 어찌 화면 좌표를 표시한 지도 기능입니다.
  • 지도를 렌더링하는 데이터(시리즈의 폴리에 대한 도로,경계,등등)방법에서 쉽게 확인할 수 있게 되었습니다 회전하고 확장 전체 맵?
  • 렌더링은 내 전체 맵으로 시리즈의 타일""그래서만이징/라인 보기 영역 내에서 렌더링됩?

Ex.호랑이의 데이터로 렌더링되지도를 표시:
alt text

누군가와 함께 일부 경험과 통찰력하는 가장 좋은 방법은 무엇인지에 대한 읽을에서 이러한 파일을 어떻게 내가 그들을 대표(데이터베이스에 메모리가 큰 데이터 구조를)에서 내 프로그램,그리고 어떻게 렌더링해야 하는(회전/확장)-지도 데이터가 화면에 평가될 것입니다.

편집:을 명확히,나는 사용하지 않는 모든 구글이나 야후 지도 API 를 사용합니다.마찬가지로,사용하고 싶지 않아요.내가 찾는 것은 더 많은 스크래치에서 접근 방법을 활용하여 그 api 프로그램/프로그램.이 될 것입니다 데스크톱 응용 프로그램.

도움이 되었습니까?

해결책

첫째,내가하는 것이 좋습니다 당신은 사용 2008 호랑이 파일.

둘째,다른 사람을 지적한 많은 프로젝트가 이제는 이미 읽,해석,변환 데이터를 사용한다.건축 자신의 파서를 위해 이 데이터는 거의 사소한도 불구하고,그 이유가 없을 가을 통해 다른 프로젝트의 코드를 추출하려고 당신은 무엇이 필요하지 않는 한 당신은 계획을 사용하여 그들의 전체적으로 프로젝트.

시작하려는 경우 낮은 수준에서

구문 분석

건축 자신의 호랑이를 파서(합리적으로 쉽게 단지 DB 라인의 세그먼트),그리고 건물의 간단한 렌더링에서 최고의(선,다각형,문자/름)은 또한 매우 쉽습니다.당신은에서 보고 싶은 다양한 지도 투 유형 에 대한 렌더링 단계입니다.가장 자주 사용하는(고 따라서 가장 친숙한 사용자에게)은 Mercator 프로젝션 -그것은 매우 간단하고 빠르다.할 수 있습과 재생을 지원하는 다른 계획안.

이들을 제공할 것입니다'의미'의 측면에서 어떻게 보고하여 프로젝트 지도 및 방법 역는 투상(예를 들어 사용자 클릭 지도에서,당신이보고 싶은 lat/lon 그들이 클릭-이 필요합 반전하는 현재 프로젝션 방정식).

개발 하는 경우 나의 렌더러 내가 결정하는 기초 내에 고정된 크기(임베디드 장치),그리고 고정 확대 기능을 지원합니다.이 의미하는 바에서 맵 lat/lon 으며,중앙 픽셀=센터 lat/lon 에서 지정 배율,그리고 주어진 mercator 투사 계산할 수있는 픽셀로 표시되 각 lat/lon,그 반대의 경우도 마찬가지입니다.

일부 프로그램할 수 있도록 허용 창을 따라,그리고 대신 사용 확대 및 고정된 지점,그들이 사용하는 두 개의 고정 포인트(자주 왼쪽과 오른쪽 하단 모서리의 직사각형을 정의하는 창).이 경우에는 그가 사소한 결정하는 픽셀을 위도/경도 transfer-그것은 단지 몇 가지 보간을 계산합니다.회전 및 스케일이 전송 기능을 조금 더 복잡,하지만 할 수 없는 상당히 그래서-그것은 여전히는 직사각형 창과 보간법,그러나 창의 모서리 될 필요가 없에서 어떤 특정한 방향과 관련하여 북쪽에.이 추가 몇 가지 코너의 경우는(당신은 설정할 수 있습니다지도 안고 그것을 보면서 안에 지구를 위해 인스턴스)그러나지 않는 부담이 될 수 있는 다룬 당신이 그것에서 작동합니다.

일단 당신이 lat/lon 을 픽셀로 전송 연료 라인과 다각형은 매우 간단하 제외하고를 위해 정상적인 그래픽 문제(등의 가장자리 선 또는 다각형의 겹치는 부적절하게,anti-aliasing,etc.).그러나 렌더링 기본적인 추 지도 등에 의해 수행을 많이 오픈 소스 렌더러는 것은 매우 간단합니다.

당신은 또한 재생할 수 있는 거리한 원산-예를 들면 좋은 엄지손가락의 규칙은 그 정도의 모든 lat 또는 lon 적도에서 약 111.1KM 그러나 하나 변경으로 당신은 가까이하는 하나 극고,다른 계속 남아서 111.1 있습니다.

저장소 및 구조물

어떻게 당신은 상점과 데이터를 참조하십시오,그러나,크게 좌우에 당신은 무엇을 계획하고 있습니다.많은 어려운 문제 발생을 사용하려면 동일한 데이터베이스의 구조에 대한 인구통계 vs 라우팅-은 주어진 데이터베이스 구조와 인덱싱 것에 대한 빠른 중 하나,그리고한다.

사용 zipcodes 및 선적에만 인근 zipcodes 작동을 위한 작은 지도 렌더링 프로젝트이지만,필요한 경우로서 귀사가 필요로 하시는 다른 구조입니다.몇 가지 구현이'레'데이터베이스를 포함하는 주요 도로와 스냅로 오버레이(통해 또는 여러 개의 오버레이-지역,지하철,county,국가,국가).이 결과에서는 빠른하지만,때때로 비효율적인 라우팅이라고 합니다.

타일

기와 당신의 지도는 실제로 쉽지 않습니다.에서 더 낮은 확대를 렌더링할 수 있습니다 전도하고 절단한다.높은 배율에서 렌더링할 수 없습니다 모든 것에 한 번(에 들어가기 때문에/공간 제약 조건),그래서 당신은 그것을 조각.

절단 라인에서의 경계를 타일 그렇게 렌더링할 수 있습니다 개인 타일에서 결과보다는 완벽한 결과-종종 무엇을 수행한다 라인은 렌더링을 넘어 타일 경계(또는,적어도 데이터 라인의 끝이 보관되지만,연출을 중지 찾으면 그것이 떨어진 가장자리)-이 감소한 오류는 발생 라인처럼 보이지 않는 매일 무료 아침 식사를 즐기는 사람들이 이에서 타일이 있습니다.

당신이 볼 수 내가 무슨 말을 하에서 작업할 때 이 문제를 해결합니다.

그렇지 않은 사소한 데이터를 찾으로 들어가는 특정 타일 뿐만 아니라-라인할 수 있는 양쪽 끝 밖에 주어진 타일,하지만을 가로 질러 여행 타일이 있습니다.해야 합 상담 그래픽에 관한 책이(마이클 Abrash 의 책을 정액 참조, 자유롭게 사용할 수 있습니다 지금에 앞의 링크).는 동안 그것은 회담에 대해 대부분의 게임에,윈도우,패스로,다각형의 가장자리,충돌,등등 모든 여기에 적용됩니다.

그러나,당신은 수도에서 재생하려면 높은 수준입니다.

일단 위의 완료(중 적용하여 기존 프로젝트,또는 위의 자신)할 수 있으로 재생 다른 시나리오와 알고리즘이 있습니다.

불가 합리적으로 쉽습니다. 입력 lat/lon(또는 클릭하도)고 가장 가까운 주소입니다.이 당신을 가르치고 해석하는 방법이 주소와 함께선 세그먼트에서는 호랑이는 데이터입니다.

기본적인 지오코딩 하는 문제입니다. 쓰 주소 parser 은 유용하고 흥미로운 프로젝트,그리고 다음을 변환하는 것으로 lat/lon 를 사용하는 호랑이는 데이터가 아닌 사소한이지만,많은 재미 있습니다.밖으로 시작하는 간단하고 작은하여 필요한 정확한 이름과 형식을 매치한 다음 시작하는 모양으로'좋아요'일치하고 발음합니다.많은 연구에서 이 지역에서 검색 엔진 프로젝트를 위한 일부는 여기에 도움이.

를 찾아의 두 지점 사이의 최단 경로가 아닌 사소한 문제입니다. 많은,많은 알고리즘을 하고 있는 대부분의 특허를 받습니다.나는 당신이 시도하는 경우 이 함께 가는 쉬운 알고리즘의 자신의 디자인,그리고 몇 가지 조사하고 비교하고 디자인하는 상태의 예술이다.그것은 많은 재미 있다면 그래프 이론이다.

다음과 같은 경로를 선제 지침을 제공 는지 보이는 것처럼 쉬운 일이에 첫째.주의 지침과 관련된 편의 lat/lon 쌍'를 따라'를 사용하여 경로 외부 입력(GPS,또는 시뮬레이션 GPS)고 개발하는 알고리즘을 사용자에게 지시한 각각의 실제 교차점이 있습니다.이 있다는 것을 알 수 있는 더 lat/lon 쌍을 이 지침으로 인해 구불구불한 길,등,그리고 당신은 필요한을 감지하는 방향으로의 여행 및 등등.많이 모퉁이의 경우를 보지 않을 때까지 당신은 그것을 구현하려고합니다.

관심 지점 검색합니다. 이것은 흥미로운-당신을 찾아야 해요 현재 위치,및 모든 관심 지점(지의 호랑이,자이나 다른 소스)내 일정 거리(까마귀가 날아으로,또는 어렵게-거리를 몰)의 기원합니다.이것은 흥미에서는 변환해야 POI 데이터베이스는 형식으로 검색하기 쉬운 이 상황에서.당신은 시간이 걸릴 수 없습니다를 통해 갈 수백만의 항목,수행 거리 계산(sqrt(x^2+y^2)),하고 그 결과를 리턴한다.당신이 필요로하는 어떤 방법이 있거나 알고리즘을 절단하는 데이터의 양을 아래로 처음이다.

여행 세일즈맨. 라우팅과 함께 여러 곳입니다.다만 열심히 버전의 일반 라우팅이라고 합니다.

당신의 번호를 찾을 수 있습 링크하는 많은 프로젝트 및 정보 소스에 이 주제 .

운이 좋은,그리고 주시기 바랍 게시 당신이 무엇이든 상관없이,어떻게 기초적인 또는 추악,그래서 다른 사람들은 혜택을 누릴 수 있습!

-Adam

다른 팁

샤프 맵 Winforms 및 ASP.Net 용 Open-Source .NET 2.0 매핑 엔진입니다. 이것은 필요한 모든 기능을 제공 할 수 있습니다. ESRI ShapeFiles를 포함한 가장 일반적인 GIS 벡터 및 래스터 데이터 형식을 다룹니다.

해결책은 다음과 같습니다.

  • Mapserver, Geoserver, Degree (OpenSource)와 같은 지리 공간 서버.

그들은 ShapeFiles (및 다른 많은 것들)를 읽고 제공 할 수 있습니다. 예를 들어, Geoserver (설치시) 미국 인구 조사국 Tiger Shapefiles의 데이터를 데모로 제공합니다.

  • OpenLayers와 같은 JavaScript지도 제작 라이브러리 (예제 참조 링크 텍스트

이 솔루션을 사용하여 웹에 많은 예가 있습니다.

재미있는 질문. 내가하는 방법은 다음과 같습니다.

나는 그들이 들어오는 형식으로 필요한 지오메트리를 수집합니다. USGS에서 데이터를 가져 왔기 때문에 다음과 같습니다.

그런 다음 해당 모양의 정의를 렌더링하기에 효율적인 형태로 "컴파일"하는 프로그램을 작성했습니다. 이는 데이터를 효율적으로 표시하는 데 필요한 예측 및 데이터 형식 변환을 수행하는 것을 의미합니다. 몇 가지 세부 사항 :

  • 2D 응용 프로그램의 경우 원하는 투영을 사용할 수 있습니다. 지도 투영.
  • 3D의 경우 해당 위도/경도를 3D 좌표로 변환하려고합니다. 다음은 다음과 같은 방법에 대한 수학입니다. 구형 좌표에서 정상 직사각형 좌표로의 변환.
  • 모든 프리미티브를 Quadtree/Octree (2D/3D)로 나눕니다. 이 트리의 잎 노드에는 리프 노드의 (축 정렬) 경계 박스와 교차하는 모든 형상에 대한 참조가 포함되어 있습니다. (이것은 지오메트리 조각을 두 번 이상 참조 할 수 있음을 의미합니다.)
  • 그런 다음 형상은 정점 테이블과 드로잉 명령 테이블로 나뉩니다. 이것은 OpenGL에 이상적인 형식입니다. 명령을 통해 발행 할 수 있습니다 gldrawarrays 정점 버퍼 사용 (정점 버퍼 객체).
  • 일반 방문자 패턴은 쿼드 트리/오트리를 걷는 데 사용됩니다. 보행에는 방문자가 잎 노드가 발생할 때까지 주어진 트리 노드를 교차하는지 테스트하는 것이 포함됩니다. 방문자에는 다음이 포함됩니다 : 그림, 충돌 감지 및 선택. (트리 잎에는 형상에 대한 중복 참조가 포함될 수 있기 때문에 워커는 노드를 방문한 것으로 표시하고 그 이후로 이들을 무시합니다.이 마크는 다음 산책을하기 전에 재설정되거나 업데이트되어야합니다.)
  • 공간 파티션 시스템 (나무 중 하나)과 도면 효율적인 표현을 사용하는 것은 높은 프레미터를 달성하는 데 중요합니다. 이러한 유형의 애플리케이션에서 프레임 속도가 최소 20fps를 최소화하기를 원한다는 것을 알았습니다. 많은 성능이 더 나은 맵을 만들 수있는 많은 기회를 제공한다는 사실은 말할 것도 없습니다. (광산은 잘 보이지는 않지만 언젠가는 거기에 도착할 것입니다.)
  • 공간 파티셔닝은 프로세서에 전송 된 드로우 명령 수를 줄임으로써 성능 렌더링에 도움이됩니다. 그러나 사용자가 실제로 전체 데이터 세트를보고 싶어하는 시간이 올 수 있습니다 (아마도 Arial View). 이 경우 세부 사항 제어 시스템 수준이 필요합니다. 응용 프로그램은 거리를 다루기 때문에 고속도로와 더 큰 도로를 우선시합니다. 내 드로잉 코드는 프레임 속도가 내려 가기 전에 얼마나 많은 프리미티브를 그릴 수 있는지 알고 있습니다. 프리미티브는 또한이 우선 순위에 의해 정렬됩니다. 나는 첫 번째 만 그립니다 x 어디에서 항목 x 내가 원하는 프레임 속도에서 그릴 수있는 프리미티브의 수입니다.

나머지는 표시하려는 데이터의 카메라 컨트롤 및 애니메이션입니다.

기존 구현의 몇 가지 예는 다음과 같습니다.

그림 http://seabusmap.com/assets/picture%205.png 그림 http://seabusmap.com/assets/picture%207.png

호랑이 데이터를 로컬로 저장하기 위해 선택했습니다 PostgreSQL 이랑 Postgis 도구.

그들은 당신을 위해 인상적인 도구 모음을 가지고 있습니다. 호랑이 지오 코더 호랑이 데이터를 가져오고 사용하는 좋은 방법을 제공합니다.

Postgis와 상호 작용하는 도구를 살펴 봐야합니다. 맵 서버

~에서 http://postgis.refractions.net/documentation/:

PostGIS와 함께 작동하는 몇 가지 오픈 소스 도구가 있습니다. UDIG 프로젝트는 PostGIS와 직접 작동 할 수있는 전체 읽기/쓰기 데스크톱 환경을 연구하고 있습니다. 인터넷 매핑의 경우 미네소타 대학교 매핑은 PostGIS를 데이터 소스로 사용할 수 있습니다. Geotools Java GIS 툴킷에는 Geoserver 웹 기능 서버와 마찬가지로 PostGIS 지원이 있습니다. Grass는 Postgis를 데이터 소스로 지원합니다. Jump Java Desktop GIS Viewer에는 PostGIS 데이터를 읽기위한 간단한 플러그인이 있으며 QGIS 데스크탑에는 PostGIS가 적합합니다. PostGIS 데이터는 OGG C ++ 라이브러리 및 CommandLine 도구 (및 번들 모양 파일 덤퍼와 함께)를 사용하여 여러 출력 GIS 형식으로 내보낼 수 있습니다. 물론 PostgreSQL과 함께 작동 할 수있는 모든 언어는 PostGIS와 함께 작동 할 수 있습니다.이 목록에는 Perl, PHP, Python, TCL, C, C ++, Java, C#등이 포함됩니다.

편집 : 단어 서버를 이름으로 사용하는 Mapserver를 Divite는 데스크탑 환경에서 사용할 수 있습니다.

이미 Tiger 데이터를 사용하기로 결정했지만 관심이있을 수 있습니다. OSM (Open Street Map), Beacuse OSM은 사용자 기여 데이터가 풍부한 호랑이 데이터를 완전히 가져옵니다. Tiger 형식을 고수하면 앱은 국제 사용자에게는 쓸모가 없으며 OSM은 Tiger와 다른 모든 것을 한 번에 얻을 수 있습니다.

OSM은 공동 작업 편집 무료 월드 맵을 갖춘 공개 프로젝트입니다. 이 모든 데이터를 구조화 된 XML, 지역에 대한 쿼리 또는 전 세계를 큰 파일로 다운로드 할 수 있습니다.

다양한 프로그래밍 언어로 사용할 수있는 OSM 용지도 렌더러가 있으며 대부분 오픈 소스이지만 여전히해야 할 일이 많습니다.

또한 있습니다 OSM 라우팅 서비스 불가능합니다. 웹 인터페이스가 있으며 웹 서비스 API를 통해 Queriable 일 수도 있습니다. 다시 한 번, 모든 것이 끝나는 것은 아닙니다. 사용자는이 위에 구축 된 데스크탑 또는 모바일 라우팅 애플리케이션을 확실히 사용할 수 있습니다.

그 프로젝트를 사용하기로 결정하지 않더라도 많은 영감을 얻을 수 있습니다. 그냥보세요 프로젝트 위키 그리고 관련된 다양한 소프트웨어 프로젝트의 출처에서 (위키 내부에서 링크를 찾을 수 있습니다).

Microsoft의 Visual Earth Mapping Application 및 API에서 작업하거나 Google의 API를 사용할 수도 있습니다. 나는 항상 ESRI 제품으로 상업적으로 프로그래밍했으며 Open API를 많이 사용하지 않았습니다.

또한, 당신은 메이커를보고 싶을 수도 있습니다! 그리고 파인더! 그들은 비교적 새로운 프로그램이지만 나는 그들이 무료라고 생각합니다. 데이터를 포함시킬 때 제한 될 수 있습니다.만드는 사람 여기에서 찾을 수 있습니다.

문제는 공간 처리가 비 상업적 규모에서 상당히 새롭다는 것입니다.

솔루션 비용을 지불하지 않는다면 안전한 소프트웨어 FME라는 제품을 생산합니다. 이 도구를 사용하면 모든 형식의 데이터를 다른 형식으로 변환하는 데 도움이됩니다. KML을 포함하여 Google 어스 포맷 또는 JPEG (또는 일련의 JPEG)로 렌더링합니다. 데이터를 변환 한 후 Google 어스를 사용하여 응용 프로그램에 포함시킬 수 있습니다. API 또는 타일 이미지를 표시하십시오.

FME 측면은 매우 강력한 플랫폼이므로 번역을 수행하는 동안 필요하지 않은 데이터의 일부를 추가하거나 제거 할 수 있습니다. 하나 이상이있는 경우 소스를 병합하십시오. 좌표를 변환합니다 (정확히 Google 어스가 사용하는 것을 기억하지 못합니다). 백업을 데이터베이스에 저장합니다. 그러나 진지하게 몇 달러를 기꺼이 꺼내려면 이것에 대해 조사해야합니다.

위치 (포팅 장소) 및 위치에 대한 기타 데이터/댓글이 포함 된 플래그 (샘플 맵에서와 같이)를 만들 수도 있습니다. 이 깃발은 많은 모양과 크기로 제공됩니다.

메르카토르 또는 다른 투영에 대한 단순화는 위도와 경도에 대한 일정한 변환 계수를 가정하는 것입니다. 위도도에 69.172 마일을 곱하십시오. 경도의 경우,지도 영역의 중간 위도를 선택하고 코사인 (Middle_latitude)*69.172를 곱하고 (180-100) 곱하십시오. 마일로 변환되면 다른 변환 세트를 사용하여 스크린 좌표로 이동할 수 있습니다.

이것이 1979 년에 저를 위해 일한 것입니다.

학위 당 마일 수에 대한 내 출처.

내가이 답변을했을 때 질문은 분류되었습니다

".NET의 폴리 라인으로 모양 파일 (맵 데이터)을 렌더링하는 가장 좋은 방법은 무엇입니까?"

이제 다른 질문이지만 원래 질문에 대한 답변을 남깁니다.

C#에서 일반 GDI+를 사용하여 벡터 데이터 (예 : SHP 파일의 형상과 같은)를 그릴 수있는 .NET 버전을 작성했습니다. 꽤 재미있었습니다.

그 이유는 상용 맵 구성 요소 나 오픈 소스를 사용할 수 없으므로 많은 추가 정보와 함께 다양한 버전의 형상 및 속성을 처리해야했기 때문입니다.

이 작업을 수행 할 때 가장 중요한 것은 뷰포트를 설정하고 WGIS84 좌표를 다운 스케일 및 GDI+ X로 변환/변환하는 것입니다.

한 가지 해결책은 mapxtreme을 사용하는 것입니다. 그들은 Java와 C#을위한 API를 가지고 있습니다. API는 이러한 파일을로드하여 렌더링 할 수 있습니다.

Java의 경우 :

http://www.mapinfo.com/products/developer-tools/desktop%2C-mobile-%26-internet-offering/mapxtreme-java

.NET의 경우 :

http://www.mapinfo.com/products/developer-tools/desktop%2c-mobile-%26-internet-offering/mapxtreme-2008

이 솔루션을 데스크탑 애플리케이션에서 사용했는데 잘 작동했습니다. 정보 만 제공하는 것만으로 훨씬 더 많은 것을 제공합니다.

이제 처음 부터이 작업을 수행하는 데 시간이 오래 걸릴 수 있습니다. 다운로드 할 수있는 평가 버전이 있습니다. 나는 그것이 맵을 워터 마크로 인쇄한다고 생각하지만 그렇지 않으면 완전히 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top