有什么方法可以MKMapView在iOS 6及更高版本中制作矢量图块并过度使用它们吗?我知道如何使用叠加图像MKOverlayView,但它们是光栅图像.
我想要在传单地图上显示很多GeoJSON空间数据.大约35,000个GeoJSON对象.
因为点的数量可能会非常大,我想使用geojson-vt库在客户端平铺我的数据.
现在我已经使用geojson-vt库成功平铺了我的数据:
var geoJson = {}; // Request to get data via API call not shown here
var tileOptions = {
maxZoom: 18,
tolerance: 5,
extent: 4096,
buffer: 64,
debug: 0,
indexMaxZoom: 0,
indexMaxPoints: 100000,
};
var tileIndex = geojsonvt(geoJson, tileOptions);
Run Code Online (Sandbox Code Playgroud)
如何将geojson-vt生成的矢量切片数据集成到我的Leaflet地图中?
是否有任何推荐的插件或库可以提供帮助?
我正在尝试使用openMapTiles矢量切片进行车辆路由.它似乎是一个非常快速的数据源加载.我打算模拟很多车辆,所以反复查询谷歌地图api不是一个选择.
有没有一种简单的方法来找到道路交叉点?桥梁是一个特例吗?
另外,我最终需要将多个图块合并在一起.这在实践中是如何完成的?沿边缘的点是否与相邻的瓷砖对齐.如果在瓷砖边界附近有4路交叉怎么办?
我有一个 geoJSON 文件,我vector.tiles使用这个 npm 包转换成它。我用const tileIndex = geojsonvt(geoJSON). geoJSON 文件具有以下格式,并且在转换时没有任何错误。
const geoJSON = {
type: 'FeatureCollection',
crs: {
type: 'name',
properties: { name: 'urn:ogc:def:crs:OGC:1.3:CRS84' }
},
features: [
{
properties: [Object],
geometry: [Object],
type: 'Feature',
_id: '5ed7b221a61a4b2970433932'
},
... 1840 more items
]
}
Run Code Online (Sandbox Code Playgroud)
转换后得到的结果(geoJSON vector-tiles)如下 -
const tiles = {
options: {},
tiles: {
'0': {
features: [Array],
numPoints: 540529,
numSimplified: 3,
numFeatures: 1940,
source: null,
x: 0,
y: 0,
z: …Run Code Online (Sandbox Code Playgroud) 是否可以获得瓷砖 LngLat 边界框?(如果可能的话还有中心/宽度)
即给定任何图块“id”(例如6/33/24),计算所需的坐标。我非常渴望得到答案,我什至不在乎它是用什么语言写的。
磁贴“id”有 3 个部分:( 6/33/24) z/x/y。
zx/y从左/上原点开始进行地板缩放 (0-24) 和图块编号。
当缩放为 1 时,整个地图被分为 4 个相等的图块(如图所示)。每次缩放 ( z) 增加时,每个图块都会细分为 4 个相等的图块(例如,缩放 2 = 16 个图块)。
_______________________
| | |
| 1/0/0 | 1/1/0 |
| | |
|__________|___________|
| | |
| 1/0/1 | 1/1/1 |
| | |
|__________|___________|
Run Code Online (Sandbox Code Playgroud)
我想实现客户端标记缓存并将它们绑定到图块似乎是最合理的解决方案。我知道如何获取图块(循环sourceCaches图块或使用几种transform方法),但我不知道如何从图块矩阵或图块 ID 获取 LngLat 数据。
标记缓存的超级基本 JavaScript 概念(用于上下文):
_______________________
| | |
| 1/0/0 | 1/1/0 …Run Code Online (Sandbox Code Playgroud) 我是 MapBox GL Js 的新手,我想通过 https 调用一个大的 GeoJSON 文件并将其显示到地图上。我认为调用矢量平铺是最好的方法,我发现一些教程展示了如何将 GeoJSON 数据转换为矢量平铺,但在服务器端或将其上传到 MapBox 样式,但我的 GeoJSON 文件经常更改。所以我找到了这个解决方案是一个名为 geojson-vt 的新 JavaScript 库,描述了如何将巨大的 GeoJSON 文件快速转换为矢量切片(客户端),这似乎是我正在寻找的,但是! ,如何将其集成到MapBox GL JS中以调用图层?
阻止如何使用 Mapbox GL JS 添加图层,结果如下:vartileIndex = geojsonvt(MyGeoJSON); vartile =tileIndex.getTile(z,x,y);
...或者我只是没有明白!请有人帮助或可以为我的问题提出其他解决方案。
我正在尝试使用 OpenLayers 来显示我创建并正在使用的矢量切片图层和底图。
我使用的栅格底图在 EPSG:4326 中,我想覆盖 MVT 层,也重新投影到 EPSG:4326 中。
但是,它似乎不起作用。当我有一张视图投影设置为 EPSG:3857 的地图时,一切看起来都很好。EPSG:4326 中的底图被重新投影到 EPSG:3857,矢量图层看起来完全正确。
但是当我将地图视图投影更改为 EPSG:4326 时,栅格底图看起来还可以,但是 MVT 图层将无法显示。没有 tile 请求,我也没有收到 JS 错误。
我将projectionMVT 源的属性设置为EPSG:3857. 我已经尝试定义我自己的 TileGrid 以及ol.tilegrid.createXYZ(),但是当主地图视图投影设置为 EPSG:4326 时没有任何效果。
我知道 OpenLayers 中的 MVT 支持是相当新的,也许这还不支持?
我正在尝试这样做,因为我的矢量数据最初在 EPSG:4326 中。我必须将其转换为 EPSG:3857 才能将其用作 MVT 磁贴,但我希望能够在其原始投影中显示它。
我遇到了Mapbox-GL-JS的问题,在我的浏览器中有缓存的矢量图块,无法看到最近的更改。正常的解决方法是example.com/tiles/1/2/3.png?update=1在磁贴字符串()的末尾附加一个唯一的字符串,但是我不确定如何在Mapbox-GL-JS中使它起作用,因为它是根据以下内容的组合为我构造磁贴字符串的层数:
...
metadata": {
"mapbox:autocomposite": true,
"mapbox:type": "default"
},
"sources": {
"mapbox": {
"url": "mapbox://mapbox.satellite",
"type": "raster",
"tileSize": 256
},
"composite": {
"url": "mapbox://stevage.9vj4wkw3,mapbox.mapbox-streets-v7,stevage.ab95cml8",
"type": "vector"
}
},
Run Code Online (Sandbox Code Playgroud)
是否有某种方法可以将一些额外的文本强制放入URL?
有没有人使用Mapbox或OpenMapTiles矢量图块来查找从一个地方到另一个地方的路线?
在我看来,这些瓷砖是为了显示而制作的,并且不像开放街道地图那样包含交叉点信息.
我想使用 ORM 在 Django 中创建一个 Mapbox 矢量瓦片 (MVT)。在 SQL(PostgreSQL、PostGIS)中,对于缩放=8、x=137、y=83 的图块,SQL 查询如下所示:
SELECT ST_AsMVT(tile)
FROM (SELECT id, ST_AsMVTGeom(geometry, ST_TileEnvelope(8, 137, 83)) AS "mvt_geom"
FROM geomodel
WHERE ST_Intersects(geometry, ST_TileEnvelope(8, 137, 83))
) AS tile;
Run Code Online (Sandbox Code Playgroud)
ST_AsMVT聚合所有行,输出是bytea可以作为响应发送的二进制字段 ( )。
由于 GeoDjango 不包含特定的 PostGIS 函数,我为它们创建了自定义函数:
class TileEnvelope(Func):
function = "ST_TileEnvelope"
arity = 3
output_field = models.GeometryField()
class AsMVTGeom(GeoFunc):
function = "ST_AsMVTGeom"
arity = 2
output_field = models.GeometryField()
Run Code Online (Sandbox Code Playgroud)
我设法创建了内部子查询并且它有效:
tile_envelope = TileEnvelope(8, 137, 83)
tile_geometries = GeoModel.objects.filter(geometry__intersects=tile_envelope)
tile_geometries_mvt = tile_geometries.annotate(mvt_geom=AsMVTGeom("geometry", tile_envelope))
tile_geometries_mvt …Run Code Online (Sandbox Code Playgroud) vector-tiles ×10
mapbox-gl-js ×4
geojson ×2
mapbox-gl ×2
openmaptiles ×2
django ×1
ios ×1
javascript ×1
leaflet ×1
mapbox ×1
mapkit ×1
mkmapview ×1
mkoverlay ×1
openlayers-3 ×1
postgis ×1
postgresql ×1
python ×1
reactjs ×1