Giter VIP home page Giter VIP logo

mbtileserver's Issues

Serve Mapbox-GL style files

is it possible to serve other files; i.e. like a standard http server?
In particular I am trying to use mapbox-gl.js which uses a .json file to store the style and also the mbtiles source location.
How can I serve the .json file from http://localhost?
Thanks.

Key option is getting wrong text from CLI help

Usage:
  mbtileserver [flags]

Flags:
      --cachesize int   Size of cache in MB. (default 250)
  -c, --cert string     X.509 TLS certificate filename.  If present, will be used to enable SSL on the server.
  -d, --dir string      Directory containing mbtiles files. (default "./tilesets")
  -k, --key string      flag usage
  -p, --port int        Server port. (default 8000)

key option should not be 'flag usage'

Add CORS support

To use tiles in a page served on another server or port, we need CORS enabled.

Drop Leaflet, move everything to Mapbox GL

This is nothing against Leaflet, which remains as awesome as ever.

However, for easier maintenance and enhancements, it would be best to limit our map preview technology to a single type.

Handle proxy

mbtileserver doesn't work correctly behind a proxy, e.g., Caddy.

It order to do this properly, we may need to allow setting the proxy hostname, port, and scheme.

Very slow startup when using large tilesets

Starting mbtileserver on a tileset that is >50 GB takes a couple minutes. Since we are using running a few basic queries to determine contents of the tileset, it should not take this long.

Use enums for determining types instead of strings

Right now we do lots of comparisons on string representation of format. We could do better using an enum and a higher level property.

We need to do this more than ideal because vector tiles require different handling if a few places than image tiles.

Corrupted mbtiles file causes segmentation violation and crashes the server

Here's the traceback of a sample error:

time="2018-03-28T20:33:10Z" level=error msg="Unable to create service set: could not open mbtiles file \"/root/tiles/ace_aqua_rept_ntv.mbtiles\": database disk image is malformed" 
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x7fc8a1]

goroutine 1 [running]:
github.com/consbio/mbtileserver/handlers.(*ServiceSet).Handler(0x0, 0xa29650, 0x1, 0xc4203e8ca0, 0xc42000e1b8)
	/go/src/github.com/consbio/mbtileserver/handlers/handlers.go:409 +0x61
main.serve()
	/go/src/github.com/consbio/mbtileserver/main.go:161 +0x59f
main.glob..func1(0xea67e0, 0xc4203d7cb0, 0x0, 0x1)
	/go/src/github.com/consbio/mbtileserver/main.go:34 +0x20
github.com/consbio/mbtileserver/vendor/github.com/spf13/cobra.(*Command).execute(0xea67e0, 0xc42000c070, 0x1, 0x1, 0xea67e0, 0xc42000c070)
	/go/src/github.com/consbio/mbtileserver/vendor/github.com/spf13/cobra/command.go:651 +0x23d
github.com/consbio/mbtileserver/vendor/github.com/spf13/cobra.(*Command).ExecuteC(0xea67e0, 0x40c62c, 0xc420024118, 0x0)
	/go/src/github.com/consbio/mbtileserver/vendor/github.com/spf13/cobra/command.go:726 +0x2d4
github.com/consbio/mbtileserver/vendor/github.com/spf13/cobra.(*Command).Execute(0xea67e0, 0x0, 0xbea71cdb785791df)
	/go/src/github.com/consbio/mbtileserver/vendor/github.com/spf13/cobra/command.go:685 +0x2b
main.main()
	/go/src/github.com/consbio/mbtileserver/main.go:66 +0x2d

Allow loading new tilesets without restarting server

Would be nice to add tilesets (and possibly remove / replace them) without restarting the server process.

Some options:

  1. Add a filesystem watcher and update the map of services on change
  2. Add an API endpoint (and associated auth, perhaps an API key) that we call on the running process to request update

Some challenges:

  • we are not using a concurrency safe map. (concurrent-map might work)

Add support for legend

Should be able to provide rendering info via JSON or using HTML stored in the mbtiles file (like this ).

While the spec includes HTML to make it really easy to drop in place in HTML, it conflates data (the mapping of values to colors) with presentation / layout in a way that seems less than portable.

Docker image link seems to be broken / unpublished

Hi and thanks for this great project :)

There are 2 things that didn't work for me while following the README:

  1. The local installation output was blank (go get github.com/consbio/mbtileserver) and while trying to run mbtileserver I receive a command not found message
  2. The docker image seems to not be working at all. While trying to pull the docker image I receive this:

docker pull consbio/mbtileserver:latest
Error response from daemon: pull access denied for consbio/mbtileserver, repository does not exist or may require 'docker login'

Any help would be very appreciated.

And preview Leaflet map

Similar to what we did in clover, add a dynamically created Leaflet map using this tile service. Should be as simple as creating a template, injecting variables, and serving that on a known URL.

Integrate tilemerge for creating static maps

https://github.com/brendan-ward/tilemerge

Use case is to make static maps from Leaflet or other interactive maps.

Possible REST API:
/services/<service_name>/merge/z/<x0>:<x1>/<y0>:<y1>.<ext>?xOff=<xOff>&yOff=<yOff>&mapWidth=<mapWidth>&mapHeight=<mapHeight>

where x0:x1, y0:y1 is a tile range, e.g., tiles x0,y0 to x1,y1.

xOff and yOff are offsets either within the image, or outside the image. mapWidth and mapHeight refer to the dimensions from the offset point.

How to handle wrapping the antimeridian is TBD.

Server crashes on startup if image type cannot be detected in an mbtiles file

Unable to create service set: could not open mbtiles file "/tmp/test.mbtiles": Could not detect tile format
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x43f7601]

goroutine 1 [running]:
github.com/consbio/mbtileserver/handlers.(*ServiceSet).Handler(0x0, 0x468d6d8, 0x1, 0xc4204121e0, 0xc4200be068)
	/Users/bcward/go/src/github.com/consbio/mbtileserver/handlers/handlers.go:405 +0x61
main.serve()
	/Users/bcward/go/src/github.com/consbio/mbtileserver/main.go:161 +0x55a
main.glob..func1(0x49203c0, 0xc420395400, 0x0, 0x4)
	/Users/bcward/go/src/github.com/consbio/mbtileserver/main.go:34 +0x20
github.com/consbio/mbtileserver/vendor/github.com/spf13/cobra.(*Command).execute(0x49203c0, 0xc4200c0100, 0x4, 0x4, 0x49203c0, 0xc4200c0100)
	/Users/bcward/go/src/github.com/consbio/mbtileserver/vendor/github.com/spf13/cobra/command.go:651 +0x23d
github.com/consbio/mbtileserver/vendor/github.com/spf13/cobra.(*Command).ExecuteC(0x49203c0, 0x400646c, 0xc42009c058, 0x0)
	/Users/bcward/go/src/github.com/consbio/mbtileserver/vendor/github.com/spf13/cobra/command.go:726 +0x2d4
github.com/consbio/mbtileserver/vendor/github.com/spf13/cobra.(*Command).Execute(0x49203c0, 0x0, 0xbed3325b39422aa3)
	/Users/bcward/go/src/github.com/consbio/mbtileserver/vendor/github.com/spf13/cobra/command.go:685 +0x2b
main.main()
	/Users/bcward/go/src/github.com/consbio/mbtileserver/main.go:66 +0x2d

Test file:
test.mbtiles.zip

We should not publish an invalid service, but we also shouldn't completely crash when this occurs.

Add support for subfolders containing mbtiles tiles

There is a limit on the number of unique filenames that can be stored and easily used in a given folder.

For a folder structure like:

<tileroot>/a.mbtiles
<tileroot>/b/c.mbtiles

would be published as:

<domain>/a
<domain>/b/c

However, a folder name that is the same as a sibling mbtiles file name would not be allowed, e.g.,

<tileroot>/a.mbtiles
<tileroot>/a/b.mbtiles

Enable serving of static map-related assets

Related to #64

In order to better support self-hosted tilesets and styles, we need to support serving other static assets likely to be referenced from those styles, including:

  • fonts
  • sprites

Add feature identify / highlight on click

I often use the preview maps for inspecting data before consuming in projects.

It would be very helpful if I could click on a feature, and show info for that feature in a sidebar, popup, etc. This way I could inspect certain features, and verify that they have the right attributes present, and right attribute values.

fun with logrus dependency lowercased name change

the logrus repo was renamed from github.com/Sirupsen/logrus to lowercased github.com/sirupsen/logrus so go build does not work for me anymore because logrus_sentry has changed it already .. what a hickup i can tell you.

After renaming the imports to lowercase in main.go and mbtileserver it compiles.

Is there any chance that you can tackle this issue?

Add ArcGIS API for identify

Using vector tiles or UTF8-grids in mbtiles file alongside image tiles.

Given a geographic location and info about map extent / width:

  1. determine zoom level
  2. find appropriate tile
  3. geometric operation (e.g., point in polygon) or lookup into UTF8-grid to find feature(s) at location
  4. format attribute data and return

mbtileserver does not start on Windows

Following the instructions:

You can install this project with

go get github.com/consbio/mbtileserver

This will create and install an executable called mbtileserver.

However, the command does not install anything. Running it with -v only gives:

C:\>go get -v github.com/consbio/mbtileserver
github.com/consbio/mbtileserver (download)

Thank you for your help

Map preview error

Steps to reproduce

$ # mb-util โž  https://github.com/mapbox/mbutil
$ mb-util ~/png-tiles ./mbtiles/testdata/test.mbtiles
$ docker-compose up -d
$ curl http://127.0.0.1:8080/services/test | jq
{
  "format": "png",
  "id": "test",
  "map": "http://127.0.0.1:8080/services/test/map",
  "maxzoom": 18,
  "minzoom": 0,
  "scheme": "xyz",
  "tilejson": "2.1.0",
  "tiles": [
    "http://127.0.0.1:8080/services/test/tiles/{z}/{x}/{y}.png"
  ]
}
$ curl http://127.0.0.1:8080/services/test/map
Internal Server Error
$ docker-compose logs mbtileserver
...
mbtileserver     | time="2019-11-14T22:57:50Z" level=error msg="could not parse template asset \"map\": html/template: cannot Parse after Execute"
mbtileserver     | time="2019-11-14T22:57:52Z" level=error msg="template: \"map\" is an incomplete or empty template"
mbtileserver     | time="2019-11-14T22:57:53Z" level=error msg="template: \"map\" is an incomplete or empty template"

404 not found

I want to first of all say that I am extremely happy that someone has put this together and want to say what a great job you have done with this.

Upon using this there is one thing that has come up which is if there is not a tile for something(which is completely normal) but console logs an error of 404 not found. Upon trying to see if i could get mapbox gl to suppress it I came to find out that its not so much a mapbox issue as it is the server returning 404. They recommended having the server send back 204, which is a successful request with no content.

Let me know your thoughts.

Thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.