오프라인 미끄러운지도 타일 데이터베이스


25

현재 앱 매니페스트가 있고 여러 플랫폼에서 잘 작동하는 오프라인 HTML5 맵 응용 프로그램 (사용자 정의 추가 기능이있는 Leaflet & KendoUI 기반)이 있습니다. 그러나 매니페스트를 사용하여 실제 맵 타일을 이런 식으로 저장하는 것이 주저합니다 (PNG 파일은 TMS 스타일 타일 캐시로 저장 됨).

이슈 :

  • 약 1,000 개의 PNG 파일에 많은 타일 (10MB-50MB)이있을 수 있습니다
  • 초기 다운로드 속도가 느려질 수 있으며 사용자에게 진행 상황을 표시하기가 어려울 수 있습니다
  • 앱 매니페스트가 작동하거나 전체 오프라인 캐싱이 실패하지 않으면 작동하지 않습니다 ([whatwg.org] [1]에 따름)
  • 오프라인 사용자는 때때로 다시 연결하고 타일을 새로 고쳐야합니다. 작은 델타이지만 앱 매니페스트 메커니즘은 매니페스트 업데이트 즉시 모든 js, css 및 PNG 파일을 다시로드합니다.

다른 아이디어 : 웹 응용 프로그램을 미끄러운지도 타일의 저장소와 분리하십시오. 타일을 웹 응용 프로그램 친화적 인 데이터베이스에 저장

최신 정보:

[PouchDB는 최근 이진 Blob에 대한 지원을 추가했습니다. 초기 결과가 양호합니다. 참조 : /programming/16721312/using-pouchdb-as-an-offline-raster-map-cache ]

질문 : JavaScript 친화적 인 DB에 대한 다음 선택에 대해 집단의 지혜 (및 경험)는 무엇을 말합니까 ?

  1. SqlLite
    • JavaScript와 대화 할 수 있도록 네이티브 앱 래퍼를 만들어야 할 것 같습니다.
    • 예 : Windows 용 기본 프로그램에 DLL을 추가하고 Android / IOS 용 PhoneGap
  2. WebSQL
    • 지원 중단
    • 호스트 웹 서버에서 쉽게 생성하고 배포 할 수있는 것은 SQL Lite였습니다.
  3. IndexDB

    • 얼룩 저장이 작동하는 것 같습니다 : https://hacks.mozilla.org/2012/02/storing-images-and-files-in-indexeddb/
    • 이것이 처음에 DB를 채우는 유일한 방법인지 걱정됩니다.
    • 이것이 기본적으로 SQLLite 파일입니까? 대량 DB 업로드 용으로 배송 할 수 있습니까?
    • 나는 이것을 해결책으로 기대고 있습니다. 내가 모르는 문제가 있습니까?

    요구 사항 :

    • 클라이언트 웹 DB에 빠른 초기 채우기 (다운로드를 통해)
    • 현재 Leaflet TileLayer API와 호환 가능 (즉, 사용자 정의 계층을 작성하지는 않지만 필요한 경우 ...) (예 : MbTiles)
    • 플랫폼 : Windows 랩톱이지만 Android 및 IOS 태블릿이 필요함 (IndexDB가 릴리스 될 때까지 기다릴 수 있으며 즉각적인 지원이 필요하지 않음)
    • 오히려 네이티브 앱 (EXE, IOS, Android)을 작성하지는 않지만 그것이 최선의 방법이라면 ...
    • 웹 맵의 서버 측 생성 (자동화 프로세스) 사용자가 위치를 선택하고지도를 선택하면 동적으로 변환되어 미끄러운 타일 캐시로 바뀝니다 (이 작업은 이미 대부분 완료되었습니다).
    • 빠른 대량 초기 다운로드
    • 지도 변경 델타 새로 고침 (일정 재고 번호를 기반으로이 논리를 작성하고 날짜 논리를 업데이트 함)
    • 현재 Leaflet & KendoUI 웹 애플리케이션에 미치는 영향 최소화

최신 정보:

주요 배경 아이디어 : 웹 앱은 상당히 안정적이지만, 위치에 따라 미끄러운지도 타일이 생성되며 어떤 유형의 문제 (백엔드에서)가 발생합니다. 그래서 초기 '빅뱅'을 전송하고 업데이트하는 두 가지 다른 방법을 생각했습니다.

Zip 파일 (아마도 좋은 생각은 아닙니다-서버로드를 추가하기 때문에) 클라이언트 시스템에서의 확장에도 사용자 상호 작용이 필요하지만 미끄러운 타일이 로컬 URL을 사용할 수 있습니다

HTML5 파일 API : 나는 이것을 자세히 보지 않았다. :하지만 TMS 형식의 로컬 파일 트리 만들기 위해 대부분의 작업을했다 나타납니다 http://www.html5rocks.com/en/tutorials/file/filesystem/ 예를 들어 내가 웹 작품을 사용할 수 있습니다 (테스트에 흥미로운 일이 될 것이다 어떤 성능을한다 디스크와 인터넷 전체의 대역폭을 최대화하기 위해). IndexDB는 웹 작업자 친화적으로 널리 구현되지 않았습니다 (동기 인터페이스 : /programming/10698728/indexeddb-in-web-worker-on-firefox

Leaflet과 함께 IndexDB를 사용하는 방법에 대한 추가 정보를 찾았습니다.

https://github.com/calvinmetcalf/leaflet.pouch (오프라인의 경우 indexdb와 couchdb 동기화) 또한 indexdb, websql 및 로컬 저장소에 대한 읽기 / 쓰기 속도에 대한 몇 가지 테스트가 있습니다. http://jsperf.com/indexeddb -vs-localstorage / 15

그리고 여기 자바 스크립트에서 읽기 / 쓰기 파일 API를 사용하는 방법이 있습니다 : (그리고 저장 공간 제한을 늘리도록 요청 하십시오 ) http://www.html5rocks.com/en/tutorials/file/filesystem/


좋은 의견을 주신 Tom MacWright (일명 tmcw)에게 감사합니다. 바이너리 블롭을 수집하기 위해 사용자 정의 레이어를 만들 때 실제로 도움이 될 것입니다.

어제 IndexedDB를 사용하여 테스트를 수행했으며 일부 polyfill 및 라이브러리를 사용하여 문제를 해결할 것이라고 생각합니다. 이제 땀을 흘려야 할 때가되었습니다. 다시보고하겠습니다.


BTW : 클라이언트 측 데이터베이스에 대한 연구 결과를 보려면 다음을 참조하십시오.

/programming/14113278/storing-image-data-for-offline-web-application-client-side-storage-database



복제의 특별한 이유가 있습니까? stackoverflow.com/questions/14058489/…
radek

underdark되지 않은 undershark? ;]
radek

Anita를 편집 해 주셔서 감사합니다. 나는 초보자 이며이 메모를 끝내는 적절한 에티켓을 알지 못했지만 독자가 솔루션을 위해 선택한 것에 대한 단서를 남깁니다.
Dr.YSG

답변:


7

PhoneGap 및 MBTiles .

WebSQL 및 IndexDB로는 충분하지 않습니다. 'Windows 랩톱'은 모바일 장치와 동일한 코드가 아닙니다.


추가 배경 : 고객은 랩톱 지원 만 요청했습니다. 이것을 태블릿 (IOS, Android)으로 늘릴 수 있는지를 개인적으로 바라는 것은 개인적입니다. 내 생각에 PhoneGap은 개발 시간을 너무 많이 늘리고 코드베이스 (소프트웨어 유지 관리 비용)의 조각화로 이어질 것이지만 기사에 감사드립니다.
Dr.YSG

방금 여기에 추가적인 제약이 있다는 것을 기억했습니다. PhoneGap으로 구현하면 스폰서가이를 기본 앱이라고 부르고 1 년 정도의 인증을 거쳐야합니다. 우리는 이것을 정말로 피하고 싶습니다.
Dr.YSG

1
당신이 찾고있는 것은 네이티브 구성 요소가 없으면 불가능합니다. 아마 재협상 할 시간입니다.
tmcw

호기심을 위해 IndexDB 또는 FileAPI의 문제점은 무엇입니까?
Dr.YSG

1
거의 제로와 드문 드문 브라우저 지원 및 낮은 크기 제한. 직접 해보십시오.
tmcw

3

PNG 미끄러운지도에 대한 오프라인 Blob 캐시 결과

테스팅

  • 171 PNG 파일 (총 3.2MB)
  • 테스트 된 플랫폼 : Chrome v24, FireFox 18, IE 10
  • Android 용 Chrome 및 FF에서도 작동

웹 서버에서 가져 오기

  • 웹 서버에서 Blob 다운로드를 위해 XHR2 (거의 모든 브라우저에서 지원됨) 사용
  • 필 파슨스 (Phil Parsons)의 XHR2-Lib와 함께 갔다.

저장

디스플레이

  • Leaflet http://leafletjs.com/ 을 사용 하여 맵 타일을 표시하고 있습니다.
  • DB에서 타일 레이어를 가져 오기 위해 Ishmael Smyrnow의 기능 타일 레이어 플러그인을 사용했습니다.
  • DB 기반 타일 레이어를 순수 로컬 (localhost : //) 스토리지와 비교했습니다.
  • 성능에는 눈에 띄는 차이가 없습니다! IndexedDB와 로컬 파일 사용 사이!

결과

  • 크롬 : 가져 오기 (6.551 초), 저장 (8.247 초)
  • FireFox : 가져 오기 (0.422 초), 저장 (34.519 초)
  • IE 10 : Fetch (0.668s), 저장 : (0.896s)

2

그래서 당신은 거의 leaf.pouch를 사용하고 싶지 않습니다. 타일이 아닌 벡터 데이터를 염두에두고, PouchDB 를 사용하여 타일을 저장 하는 것이 좋습니다 .CouchDB 에서 복제 할 수도 있습니다. 빠른 초기로드, 위의 @tmcw의 답변은 모바일 웹 페이지가 아닌 전화 앱이 더있는 경우에도 작동합니다.


0

PNG 또는 JPG 또는 WebP 또는 GZipped PBF가 포함 된 tile_data blob 필드가있는 타일 테이블에 표준 SQLite3 컨테이너 MBTILES 형식을 사용하고 MBTILES와 통합하십시오 .JS https://github.com/tilemapjp/mbtiles.js/tree/master https : // www.npmjs.com/package/Leaflet.TileLayer.MBTiles

MapBox의 MBUTIL을 사용하여 TMS 또는 XYZ 타일을 mbtile로 변환 할 수 있습니다. 타일 ​​폴더를 먼저 생성해야하는 경우 GDAL2TILES_Parallel.py 또는 gdal2tilesp.py를 사용하여 원래의 병렬 다중 처리 파이썬 구현을 사용하십시오. 둘 다 GDAL이 필요합니다.


완전히 오프라인으로 볼 수 있도록 전단지에서 mbtile (래스터, 벡터 및 지형 / 고도)을 직접 읽었습니다.
GeospatialInformationTech

내 구현에는 OGC GeoPackage 지원이 추가되었습니다. 래스터, 벡터, 고도 및 벡터 타일. GeoPackage-JS 사용
GeospatialInformationTech

0

Leafletjs의 MBTILES 여기에 이미지 설명을 입력하십시오

로컬 및 원격 mbtile을 읽습니다. IONIC 또는 React Native를 사용하여 모바일 앱으로 패키지하십시오. 또는 전자 원자가있는 데스크탑. MBTILES가가는 길

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.