Google maps 从SQL/CSV数据生成地图分幅(动态?)

Google maps 从SQL/CSV数据生成地图分幅(动态?),google-maps,maps,leaflet,tile,wms,Google Maps,Maps,Leaflet,Tile,Wms,以下是我所拥有的: 具有“平铺XYZ”坐标(web墨卡托平铺坐标)和“数据/颜色”的SQL表格/CSV文件 xyz颜色 13 13 5黄色 13145绿色 13145红色 … 数据结构非常简单,不需要什么花哨的东西,我可以用代码画PNG 数据量很大,例如zoomlevel 15,在全球范围内是平铺的 我想要的是: png瓷砖 基础数据不应可访问 借助传单/谷歌地图api将png图块显示为网页地图 问题: 数据太多,无法在之前生成全球所有分幅(需要几天) 因此,我在考虑一种动态缓存/平铺

以下是我所拥有的:

  • 具有“平铺XYZ”坐标(web墨卡托平铺坐标)和“数据/颜色”的SQL表格/CSV文件

    xyz颜色
    13 13 5黄色
    13145绿色
    13145红色
    …

  • 数据结构非常简单,不需要什么花哨的东西,我可以用代码画PNG

  • 数据量很大,例如zoomlevel 15,在全球范围内是平铺的
我想要的是:

  • png瓷砖
  • 基础数据不应可访问
  • 借助传单/谷歌地图api将png图块显示为网页地图
问题:

  • 数据太多,无法在之前生成全球所有分幅(需要几天)
  • 因此,我在考虑一种动态缓存/平铺创建算法(可能在之前创建zoomlevel 0-9,动态创建更高的缩放级别)
  • 似乎有很多工具(TileMill、TileStache、ArcGIS服务器等),但它们似乎都有很高的学习曲线,或者用于更复杂的任务
  • 有没有一种方法可以运行一台完全符合我需求的精益服务器?可以使用php脚本查询数据库、绘制png并按需将其提供给地图?这到底是怎么回事?什么是聪明的解决方案

非常感谢。

我遇到了一个类似的问题:使用平铺索引,返回落入相应边界框的表的点

后端

因为我使用PostgreSQL+PostGIS作为BBDD,所以我使用了repo中定义的函数

这将为平铺和缩放获取纬度和经度坐标 级别,并返回包含对象边界框的地理对象 那块瓷砖。我主要使用它来限制对地理数据的查询 特定的瓷砖,如

现在,对于您的用例,您可能没有将所有可能的磁贴都存储到给定的表中,但是您仍然可以使用所述函数来确定给定磁贴坐标的边界框:

SELECT Box2D(bounds_for_tile_indices(13, 14, 5)::geometry);
返回

BOX(-22.5 21.9430434618232,-11.25 31.9521604783552)
请注意,我显式地将
bounds\u for\u tile\u index
的输出转换为几何体,因为它的本机输出是一个地理位置,您不能将Box2D应用于地理位置

因为您说您将有一个平铺坐标表而不是几何图形,所以前一种方法可能有些过分

您可能只需要查询表中给定的x/y/x组合,获得所需的颜色,然后使用生成给定颜色的256x256px图像。引用docs的例子:

$im = imagecreatetruecolor(100, 100);

// sets background to red
$red = imagecolorallocate($im, 255, 0, 0);
imagefill($im, 0, 0, $red);
或者,保留256x256px PNG文件的有限集合,然后使用从查询中获得的颜色构建到正确图像的路径,然后使用创建最终结果,并将其发送到前端,并将正确的图像头视为PNG

正如你所看到的,画素色的瓷砖是相当容易的,但我看了第一部分只是因为我相信那些瓷砖没有你问题中的那么简单

前端

在前面,您只需要声明一个自定义映射类型(特别是对于您的用例a
google.maps.ImageMapType


我遇到了一个类似的问题:使用tile索引,返回落入相应边界框的表的点

后端

因为我使用PostgreSQL+PostGIS作为BBDD,所以我使用了repo中定义的函数

这将为平铺和缩放获取纬度和经度坐标 级别,并返回包含对象边界框的地理对象 那块瓷砖。我主要使用它来限制对地理数据的查询 特定的瓷砖,如

现在,对于您的用例,您可能没有将所有可能的磁贴都存储到给定的表中,但是您仍然可以使用所述函数来确定给定磁贴坐标的边界框:

SELECT Box2D(bounds_for_tile_indices(13, 14, 5)::geometry);
返回

BOX(-22.5 21.9430434618232,-11.25 31.9521604783552)
请注意,我显式地将
bounds\u for\u tile\u index
的输出转换为几何体,因为它的本机输出是一个地理位置,您不能将Box2D应用于地理位置

因为您说您将有一个平铺坐标表而不是几何图形,所以前一种方法可能有些过分

您可能只需要查询表中给定的x/y/x组合,获得所需的颜色,然后使用生成给定颜色的256x256px图像。引用docs的例子:

$im = imagecreatetruecolor(100, 100);

// sets background to red
$red = imagecolorallocate($im, 255, 0, 0);
imagefill($im, 0, 0, $red);
或者,保留256x256px PNG文件的有限集合,然后使用从查询中获得的颜色构建到正确图像的路径,然后使用创建最终结果,并将其发送到前端,并将正确的图像头视为PNG

正如你所看到的,画素色的瓷砖是相当容易的,但我看了第一部分只是因为我相信那些瓷砖没有你问题中的那么简单

前端

在前面,您只需要声明一个自定义映射类型(特别是对于您的用例a
google.maps.ImageMapType