- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我需要在 Mapbox Android SDK map 上绘制一个带有孔的GeoJSON 多边形。
作为GeoJSON spec说,
For type "Polygon", the "coordinates" member must be an array of LinearRing coordinate arrays. For Polygons with multiple rings, the first must be the exterior ring and any others must be interior rings or holes.
在 Leaflet、Mapbox JS 和 Mapbox GL JS 中,加载 GeoJSON 由库本身处理。在this fiddle中可以看出,该库考虑了内环,因此可以正确绘制孔。
[ //Outer ring
[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]
],
[ //Inner ring (hole)
[100.35, 0.35], [100.65, 0.35], [100.65, 0.65], [100.35, 0.65], [100.35, 0.35]
]
当我查看有关绘制多边形的 Android 文档时,没有任何关于孔的信息。他们给出的例子只是循环所有的点并用它构建一个 PolyOptions :Polygon drawing in Mapbox Android .
我一直在尝试通过添加外环的所有点,然后是内环,一个接一个地构建一个 polyOptions。使用来自 JSFiddle 的简单 geoJSON 它可以工作,它会造成一个漏洞。但是对于我更复杂的 geoJSON,整个渲染都被破坏了(形状看起来不像它应该的样子)。
之后,我尝试为 geoJSON 的每个环构建一个单独的多边形。当然形状很好,但是没有孔,而是堆叠的多边形而不是它们。
我一直在寻找 PolygonOptions 的其他选择构造函数,但只能发送点。我考虑过绘制所有多边形然后减去形状,但我 found no such feature .
Here is my GeoJSON .它在 mapbox JS 上绘制得很好。我想知道我的 GeoJSON 是否有问题,但我不这么认为,因为它在 geojson.io 上绘制得很好。也许我遗漏了一些关于 geoJSON 或 mapbox 的信息。我没有找到任何关于那个的文件。我正在考虑改用谷歌地图,但这意味着要从头开始重新启动整个项目。
有什么想法吗?
最佳答案
经过很长的一步一步的过程,我现在能够显示来自 GeoJson 数据的多边形中的孔。
我正在使用这个版本的 mapbox :
compile("com.mapbox.mapboxsdk:mapbox-android-sdk:5.0.1@aar")
我使用 Mapbox 的图层系统 (FillLayer) 结合 GeoJsonSource。这里有几行代码可以提供帮助:
//first create a feature
Feature polygon = Feature.fromJson("{\"type\":\"Feature\",\"properties\":{\"name\":\"Home Zone\"},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]],[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]],[[100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2]]]}}");
//Then create a Feature Collection from it
FeatureCollection collection = FeatureCollection.fromFeatures(new Feature[]{polygon});
//Finally you just need to use the collection to update your layer Source.
GeoJsonSource geoJsonSource = map.getSourceAs("yourSourceId");
geoJsonSource.setGeoJson(collection);
作为示例,您可以在此处查看 GeoJson: http://geojson.io/
GeoJson 格式: https://geojson.org/geojson-spec.html#id4
纯文本的 GeoJson(马来西亚有洞的巨大正方形):{"type":"Feature","properties":{"name":"Home Zone"},"geometry":{"type":"Polygon","coordinates":[[[102.0, 2.0], [ 103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]],[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [ 100.0, 0.0]],[[100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2]]]}}
关于android - Mapbox Android - 如何绘制带孔的 GeoJSON 多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35936071/
我正在尝试按照此链接 http://bost.ocks.org/mike/map/ 上的教程进行操作到目前为止,我已经完全按照列出的每条说明进行操作,但是当我尝试运行“#Converting Data
何我可以反转一个国家的 GeoJson,以便它将国家定义为世界地图多边形中的一个洞?我需要这个来在 OpenLayers 5.3 中创建 GeoJson VectorLayer 的蒙版。 最佳答案 在
我在构建 GeoJSON 并将其放在 map 上的传单代码方面遇到了一些麻烦。 GeoJSON 是根据服务的 XML 响应构建的。 错误是 无效的 GeoJSON 对象。 throw new Erro
我有一个 geojson 表示插值天气数据的等高线层。某些轮廓在更高的缩放级别消失,如以下屏幕抓图所示。 将多边形作为图层添加到 Mapbox 时,使用以下代码: map.addSource('min
我有一些地理边界 have a GeoJSON endpoint for . 我还有一些变量存储在单独的 GeoJSON endpoint 中它没有坐标,但确实有我想稍后使用 D3 对 map 进行主
我是 MapBox GL Js 的新手,我想通过 https 调用一个大的 GeoJSON 文件并将其显示到 map 上。 我认为调用 vector Tile 是最好的方法,我找到了一些教程,展示了如
我已经使用 SQL 到 geoJSON 生成了我的数据库的一些兴趣点。 地理数据: { "FeatureCollection" : [ { "g
创建一张与此处找到的 map 类似的 map : https://www.plantmaps.com/interactive-california-2012-usda-plant-zone-hardi
我对 ammCharts 比较陌生,这也是我第一次尝试创建 geoJSON 文件。 以下是我的geoJson文件: GeoJSON file 这就是我要实现的目标: example 当我加载我的 ge
我有几个 geojson 层,并且我使用组将其分层。我使用此处找到的 Mike 答案将 map 集中在给定的 geojson 文件上 -> Center a map in d3 given a geo
环回新手,但设置我的第一个基于节点的 RestAPI 很有趣。我能够创建模型并在数据存储中创建关联的表。我的模型需要具有数据类型 geojson 的属性,即以下形式的字符串: { “类型”:“特征”,
我使用传单构建了一个 map ,其中包含大的 GeoJSON 区域,这些区域由多个“较小”的 GeoJSON 区域组成。 我正在使用 Leaftet-Ajax 来这样调用它们: var Rennes
我已经能够让其中的一部分工作,但是当 properties.affectedZones 有多个条目时,我的 jQuery 失败了。我已经使用 .each 努力显示受到红旗警告的受影响区域,但是当有两个
我需要对从 geojson 文件中提取的每个功能进行不同的样式设置。然而,这个匿名样式函数仅更改它遇到的第一个功能的样式并停止。我是传单新手。看过几个演示,但找不到这个匿名样式函数仅更改第一个功能的样
我有多个 geojson 类型:存储在 Mysql 中的 FeatureCollection。我想将两个或多个 geojson 合并到一个 FeatureCollection geojson 中并显示
我有这个 geojson { "type":"FeatureCollection", "features":[ { "type":"Feature",
我正在尝试在基于标准 HelloWorld 示例应用程序的测试应用程序中加载以下 geoJson 文件。 { "type": "FeatureCollection", "generator":
我正在使用 GeoJSON 数据构建传单 map 。尝试根据 GeoJSON 属性设置我使用的图标时遇到问题。我认为我的错误与使用字符串调用对象有关,但我无法弄清楚它到底是什么。 这是我的代码: Ge
我有包含如下地理字段的文档。 "geo" : { "type" : "Point", "coordinates" : [ 37.44609999, -1
是否可以仅使用 JavaScript(通过 d3、topojson 或任何其他方式)确定给定纬度、经度的 GeoJSON 点是否位于给定 GeoJSON 多边形内? 例如,我可以根据教程 here 绘
我是一名优秀的程序员,十分优秀!