永远在考核的路上,我可以

文章探讨了地理信息系统中的多种数据格式,如.shp(Shapefile)、GeoJson、KML、KMZ(压缩KML)、TIF和坐标转换技术(如EPSG、WGS84转3857),以及与地图处理相关的库如Leaflet和ODM的面试问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 数据格式标准

  1. shp :
    前端读取shp链接
  • .shp 存储适量地图数据,记录要素的空间位置信息

  • shx 索引问及那,记录shp中要素的位置,加快数据访问速度

  • dbf 存储属性信息

  • prj 坐标系文件,记录投影信息

      .shx  .dbf三个文件组成 shx空间索引文件:用于加快查找和索引特定要素 .dbf内包括属性信息
    
  1. geojson
    参考地址
    GeoJson 是一种基于 JSON 的地理空间数据交换格式。
    GeoJson 使用了经纬度参考系统、 WGS84 坐标系统和十进制单位。

    多几何体和单几何体的数据格式最大差别在于,coordinates 数据维度比单几何体多一维。单点是一维数组,多点是二维。 多面的使用场景比较多,在行政区区划中很多城市不是连续的多边形。
    在这里插入图片描述

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {},
      "geometry": {
        "type": "LineString",
        "coordinates": []
        }
     }
 ]}
  1. kml

KML是⼀种⽤于标注和呈现地图数据的XML格式,由 Google Earth引⼊。Cesium可以使⽤KML格式的数据加载并显示3D模型、标注、图层等信 息。

地理标记语言,它可以将地理数据以及与之相关的属性信息进行编码和呈现

  1. kmz

经过ZIP格式压缩过的KML文件,当我们从网站上下载KMZ文件的时候,Windows会把KMZ文件认成ZIP文件,所以另存的时候文件后缀会被改成.ZIP,因此需要手动将文件后缀改成.KMZ

2 tiff数据格式标准和切片原理

添加链接描述

添加链接描述
添加链接描述
3 坐标转换
epsg 4326 转 3857 转2000
地址

弧度和经纬度 :弧度2pi = 360度

//wgs84_to_gcj02.js文件
 
//地标 转 国测 常量
var x_PI = (3.14159265358979324 * 3000.0) / 180.0;
var PI = 3.1415926535897932384626;
var a = 6378245.0; //卫星椭球坐标投影到平面地图坐标系的投影因子。  
var ee = 0.00669342162296594323; //椭球的偏心率。
 
 
//判断是否在国内,在中国国内的经纬度才需要做偏移
function out_of_china(lng, lat) {
    return (
        lng < 72.004 ||
        lng > 137.8347 ||
        (lat < 0.8293 || lat > 55.8271 || false)
    );
}
 
//转化经度
function transformlng(lng, lat) {
    var ret =
        300.0 +
        lng +
        2.0 * lat +
        0.1 * lng * lng +
        0.1 * lng * lat +
        0.1 * Math.sqrt(Math.abs(lng));
    ret +=
        ((20.0 * Math.sin(6.0 * lng * PI) +
            20.0 * Math.sin(2.0 * lng * PI)) *
            2.0) /
        3.0;
    ret +=
        ((20.0 * Math.sin(lng * PI) +
            40.0 * Math.sin((lng / 3.0) * PI)) *
            2.0) /
        3.0;
    ret +=
        ((150.0 * Math.sin((lng / 12.0) * PI) +
            300.0 * Math.sin((lng / 30.0) * PI)) *
            2.0) /
        3.0;
    return ret;
}
 
//转化纬度
function transformlat(lng, lat) {
    var ret =
        -100.0 +
        2.0 * lng +
        3.0 * lat +
        0.2 * lat * lat +
        0.1 * lng * lat +
        0.2 * Math.sqrt(Math.abs(lng));
    ret +=
        ((20.0 * Math.sin(6.0 * lng * PI) +
            20.0 * Math.sin(2.0 * lng * PI)) *
            2.0) /
        3.0;
    ret +=
        ((20.0 * Math.sin(lat * PI) +
            40.0 * Math.sin((lat / 3.0) * PI)) *
            2.0) /
        3.0;
    ret +=
        ((160.0 * Math.sin((lat / 12.0) * PI) +
            320 * Math.sin((lat * PI) / 30.0)) *
            2.0) /
        3.0;
    return ret;
}
 
//wgs84 to gcj02   地球坐标系 转 火星坐标系
export function wgs84_to_gcj02(lng, lat) {
    if (out_of_china(lng, lat)) {
        return [lng, lat];
    } else {
        var dlat = transformlat(lng - 105.0, lat - 35.0);
        var dlng = transformlng(lng - 105.0, lat - 35.0);
        var radlat = (lat / 180.0) * PI;
        var magic = Math.sin(radlat);
        magic = 1 - ee * magic * magic;
        var sqrtmagic = Math.sqrt(magic);
        dlat =
            (dlat * 180.0) /
            (((a * (1 - ee)) / (magic * sqrtmagic)) * PI);
        dlng =
            (dlng * 180.0) / ((a / sqrtmagic) * Math.cos(radlat) * PI);
        var mglat = lat + dlat;
        var mglng = lng + dlng;
 
        return [mglng, mglat];
    }
}
 
 
//gcj02 to wgs84  火星坐标系 转 地球坐标系
export function gcj02_to_wgs84(lng, lat) {
    if (out_of_china(lng, lat)) {
        return [lng, lat]
    }
    else {
        var dlat = transformlat(lng - 105.0, lat - 35.0);
        var dlng = transformlng(lng - 105.0, lat - 35.0);
        var radlat = lat / 180.0 * PI;
        var magic = Math.sin(radlat);
        magic = 1 - ee * magic * magic;
        var sqrtmagic = Math.sqrt(magic);
        dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
        dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
        mglat = lat + dlat;
        mglng = lng + dlng;
        return [lng * 2 - mglng, lat * 2 - mglat]
    }
}

wgs84转3857
3857转wgs84

// javascript 转换
function mercatorTolonlat(mercator){
    var lonlat={
    	x:0,
    	y:0
    };
    var x = mercator.x/20037508.34*180;
    var y = mercator.y/20037508.34*180;
    y= 180/Math.PI*(2*Math.atan(Math.exp(y*Math.PI/180))-Math.PI/2);
    lonlat.x = x;
    lonlat.y = y;
    return lonlat;
}

wgs84 转 3857

// javascript 转换
function lonLat2Mercator(lonlat){
    var mercator = {
		x:0,
    	y:0
	};
    var earthRad = 6378137.0;
    mercator.x = lonlat.lng * Math.PI / 180 * earthRad;
    var a = lonlat.lat * Math.PI / 180;
    mercator.y = earthRad / 2 * Math.log((1.0 + Math.sin(a)) / (1.0 - Math.sin(a)));
    return mercator;
}

**4 leaflet **
面试题

5 turf
面试题

6 PostgreSQL
面试题

7 ODM基本流程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Webgiserin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值