Использование пользовательских плиток с изображениями карт в LeafletJS?
Должны ли мои плитки соответствовать каким-то конкретным характеристикам?
У меня есть большой файл изображения, который я хотел бы превратить в карту с LeafletJS. Я собираюсь использовать библиотеку изображений Python, чтобы разрезать ее на все нужные мне плитки.
Тем не менее, я не могу найти никакой информации об использовании пользовательских карт в Leaflet. Предоставляю ли я Leaflet диапазон значений X,Y,Z? Я даю ему размер пикселя каждой плитки? Это выясняет это самостоятельно?
Чтобы поставить мой вопрос в один краткий вопрос: что мне нужно сделать, чтобы иметь файлы изображений, которые могут дублироваться как листы карты с LeafletJS, и что, если что-нибудь, мне нужно сделать в моем внешнем скрипте? (помимо очевидного указания моего пользовательского URL)
2 ответа
Вы ищете TileLayer. В этом TileLayer вы предоставляете URL-адрес для изображений, подлежащих извлечению, для листовки с таким шаблоном:
http://{s}.somedomain.com/blabla/{z}/{x}/{y}.png
Когда вы находитесь на указанном уровне масштабирования, x и y, Leaflet автоматически извлечет плитки по указанному вами URL.
В зависимости от того, какое изображение вы хотите показать, большая часть работы, тем не менее, будет происходить при создании плитки. Плитки всегда должны иметь размер 256x256 пикселей, и если вы используете геоданные, то используется проекция Меркатора. Это может занять некоторое время, чтобы получить правильные идентификаторы плитки. Вот пример того, как работают идентификаторы плитки.
Вы даже можете подавать плитки прямо из базы данных.
Листовка формата определяет очень гибко.
Листовка просто использует заполнители z,x,y для запроса конкретных плиток.
Например:
L.tileLayer('http://localhost/tileserver/tile.aspx?z={z}&x={x}&y={y}', {
minZoom: 7, maxZoom: 16,
attribution: 'My Tile Server'
}).addTo(map);
где Tiles.aspx
Option Strict On
Partial Class tile
Inherits System.Web.UI.Page
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim z, x, y As Integer
z = CInt(Request.QueryString("z"))
x = CInt(Request.QueryString("x"))
y = CInt(Request.QueryString("y"))
Dim b() As Byte = DB.GetTile(z, x, y)
Response.Buffer = True
Response.Charset = ""
'Response.Cache.SetCacheability(HttpCacheability.NoCache)
Response.ContentType = "image/png"
Response.AddHeader("content-disposition", "attachment;filename=" & y & ".png")
Response.BinaryWrite(b)
Response.Flush()
Response.End()
End Sub