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


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.