![](/img/trans.png)
[英]How to have a popup read and display information from a GeoJson file (LEAFLET)
[英]Leaflet: How to display a Geojson file with AutoCAD data?
我試圖將 geojson 文件(從AutoCAD文件轉換為 geojson)顯示為第二層(第一層映射OSM )。
但是 geojson 內容占據了整個地圖,而不是在特定的位置。
我們如何更改geojson文件中的坐標或如何減少geojson(第二層)的高度和寬度? 請在示例 geojson 文件下方找到...
{
"type": "FeatureCollection",
"name": "entities",
"crs": {
"type": "name",
"properties": {
"name": "urn:ogc:def:crs:OGC:1.3:CRS84"
}
},
"features": [
{
"type": "Feature",
"properties": {
"Layer": "entities",
"SubClasses": "AcDbEntity:AcDbPolyline",
"EntityHandle": "1FFF0038"
},
"geometry": {
"type": "LineString",
"coordinates": [
[
0,
0
],
[
0,
319.9694
],
[
361.2444,
319.9694
],
[
361.2444,
0
],
[
0,
0
]
]
}
},
{
"type": "Feature",
"properties": {
"Layer": "entities",
"SubClasses": "AcDbEntity:AcDbPolyline",
"EntityHandle": "1FFF011D"
},
"geometry": {
"type": "LineString",
"coordinates": [
[
0,
252.0448
],
[
0,
319.9694
],
[
361.2444,
319.9278
],
[
361.2444,
142.5544
],
[
0,
142.5544
],
[
0,
197.4439
],
[
9.1842,
197.4439
],
[
9.1842,
151.7295
],
[
352.0603,
151.7295
],
[
352.0603,
310.7537
],
[
9.1842,
310.7932
],
[
9.1842,
252.0448
],
[
0,
252.0448
]
]
}
}
]
}
TL;DR:您混淆了坐標系。
GeoJSON 數據中的坐標指的是 X 軸的經度和 Y 軸的經度。 這是根據定義。 當這些坐標映射到笛卡爾平面上時,就變成了等角投影。
相比之下,當椅子和鍵盤之間有建築師時,AutoCAD(或幾乎任何其他 CAD 軟件)中的坐標通常指的是米(或英制英尺)。 當椅子和鍵盤之間有機械工程師時,它們通常指的是毫米/厘米(或英制英寸的十分之一)。
因此,從-53, -10
到0, 40
的線路既可以是從巴西到西班牙的航班,也可以是 72 米長的牆,或 72 毫米長的電纜。
由於您使用的是 GeoJSON,而 GeoJSON只關心以緯度/經度為單位的地理坐標,因此任何軟件都會假定您的坐標是緯度/經度,並相應地顯示它們。 Leaflet 的默認設置是將數據投影到Web 墨卡托,並剪裁高於/低於緯度 +90/-90 度的任何內容。 這是可以預料的。
那么,坐標系錯了,現在該怎么辦? 我看到兩種方法:
更改 CAD 坐標,使其參考 lat-lng。 此過程稱為地理配准。 具體情況不同且可能很復雜,因此通過 GIS StackExchange 進行搜索可能是一個好的開始。
告訴 Leaflet 顯示非地理坐標。 閱讀有關該主題的 Leaflet 教程,並在實例化 map 時使用crs: L.CRS.Simple
選項。 這應該使您的數據顯示(更多)正確,但請記住GeoJSON 不是非地理數據的合適數據格式。
無論如何,請注意您的坐標系。
最后我通過取消投影 CRS EPSG3857 得到了解決方案,然后相同的 geojson 文件在 leaflet 中正常工作。謝謝..
通過添加,
L.CRS.EPSG3857.unproject(point) // where point is coords.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.