This commit is contained in:
gym487 2020-11-13 18:50:11 +08:00
parent c21bdac083
commit c80858888e
16 changed files with 2487 additions and 42 deletions

1676
brmu1360.19n Normal file

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@ import socket
import struct
import time
import web
HOST = '127.0.0.1'
HOST = 'localhost'
PORT = 5678
BUFFSIZE = 1024
ADDR = ( HOST, PORT )

Binary file not shown.

View File

@ -14,6 +14,7 @@
<link rel="stylesheet" href="./jqueryui.css">
<script src="./jquery.js"></script>
<script src="./jqueryui.js"></script>
<script src="./index.js"></script>
</head>
<body>
@ -23,10 +24,15 @@
<div style="width:800px;height:600px;border:#ccc solid 1px;" id="dituContent"></div>
<br>
高度:<br>
<div id="slider"></div></div>
<div id="slider"></div>
速度:<br>
<div id="slider-speed"></div><br>
</div>
<br>
<br><br>
位置:(lat,lon,hgt)
<p id="pp"></p>
<button onclick="start()">START</button>
</center>
</body>
<script type="text/javascript">
@ -49,7 +55,7 @@
function setMapEvent(){
map.enableDragging();//启用地图拖拽事件,默认启用(可不写)
map.enableScrollWheelZoom();//启用地图滚轮放大缩小
map.enableDoubleClickZoom();//启用鼠标双击放大,默认启用(可不写)
map.disableDoubleClickZoom();//启用鼠标双击放大,默认启用(可不写)
map.enableKeyboard();//启用键盘上下左右键移动地图
}
@ -64,18 +70,77 @@
map.addControl(ctrl_sca);
}
var lat=39;
var lon=116;
var hgt=100
var lat=39.0;
var lon=116.0;
var hgt=100.0;
var points=[];
var d2m=2*Math.PI*6371000/360;
function d2l(a){//degree to linear
return {x:a.lon*d2m,y:a.lat*d2m,z:a.alt};
}
function l2d(a){
return {lon:a.x/d2m,lat:a.y/d2m,alt:a.z};
}
function ladd(a,b){//linear substrate
return {x:a.x+b.x,y:a.y+b.y,z:a.z+b.z};
}
function lsub(a,b){
return {x:a.x-b.x,y:a.y-b.y,z:a.z-b.z};
}
function lmul(a,b){
return {x:a.x*b,y:a.y*b,z:a.z*b};
}
function ll(a){
return Math.sqrt(a.x*a.x+a.y*a.y+a.z*a.z);
}
function norm(l){
var lll=ll(l);
return {x:l.x/lll,y:l.y/lll,z:l.z/lll};
}
var lt=0;
var st=0;
var pos=d2l({lon:139,lat:32,alt:10});
var des=pos;
var vec={x:0,y:0,z:0};
var lines=[];
initMap();//创建和初始化地图
var mainmarker = new BMap.Marker(new BMap.Point(lon,lat));
var mlabel = new BMap.Label("main",{offset:new BMap.Size(20,-10)});
map.addOverlay(mainmarker);
mainmarker.setLabel(mlabel);
map.addEventListener("click",function(e){
lat=e.point.lat;
lon=e.point.lng;
des=d2l({lon:e.point.lng,lat:e.point.lat,alt:20});
vec=norm(lsub(des,pos));
console.log(e.point.lng+","+e.point.lat);
});
map.addEventListener("dblclick",function(e){
pos=d2l({lon:e.point.lng,lat:e.point.lat,alt:20});
console.log(e.point.lng+","+e.point.lat);
});
function post(){
hgt=$("#slider").slider("value");
//hgt=$("#slider").slider("value");
if(ll(lsub(des,pos))>=10){
map.clearOverlays();
pos=ladd(pos,lmul(vec,$("#slider-speed").slider("value")/10))
lonb=l2d(pos).lon;
latb=l2d(pos).lat;
alt=l2d(pos).alt;
var gcj = coordtransform.bd09togcj02(lonb,latb);
var wgs = coordtransform.gcj02towgs84(gcj[0],gcj[1]);
lon=wgs[0];
lat=wgs[1];
//mainmarker.setPosition(new BMap.Point(lon,lat));
marker = new BMap.Marker(new BMap.Point(lonb,latb));
map.addOverlay(marker);
//console.log(lon+","+lat);
}
$("#pp").html("lon:"+lon+" lat:"+lat+" hgt:"+hgt+"spd:"+$("#slider-speed").slider("value")/10);
$.post("/post",{"lon":lon,"lat":lat,"hgt":hgt});
$("#pp").html("lon:"+lon+" lat:"+lat+" hgt:"+hgt);
$("#pp").html("lon:"+lon+" lat:"+lat+" hgt:"+hgt+"spd:"+$("#slider-speed").slider("value")/10);
}
$(function() {
$( "#slider" ).slider({
@ -83,6 +148,11 @@
max: 8848,
value: 10,
});
$( "#slider-speed" ).slider({
min: 0,
max: 100,
value: 0,
});
setInterval(post,100);
});
</script>

153
mapserver/static/index.js Normal file
View File

@ -0,0 +1,153 @@
/**
* Created by Wandergis on 2015/7/8.
* 提供了百度坐标BD09国测局坐标火星坐标GCJ02和WGS84坐标系之间的转换
*/
//UMD魔法代码
// if the module has no dependencies, the above pattern can be simplified to
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define([], factory);
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory();
} else {
// Browser globals (root is window)
root.coordtransform = factory();
}
}(this, function () {
//定义一些常量
var x_PI = 3.14159265358979324 * 3000.0 / 180.0;
var PI = 3.1415926535897932384626;
var a = 6378245.0;
var ee = 0.00669342162296594323;
/**
* 百度坐标系 (BD-09) 火星坐标系 (GCJ-02)的转换
* 百度 谷歌高德
* @param bd_lon
* @param bd_lat
* @returns {*[]}
*/
var bd09togcj02 = function bd09togcj02(bd_lon, bd_lat) {
var bd_lon = +bd_lon;
var bd_lat = +bd_lat;
var x = bd_lon - 0.0065;
var y = bd_lat - 0.006;
var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_PI);
var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_PI);
var gg_lng = z * Math.cos(theta);
var gg_lat = z * Math.sin(theta);
return [gg_lng, gg_lat]
};
/**
* 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
* 即谷歌高德 百度
* @param lng
* @param lat
* @returns {*[]}
*/
var gcj02tobd09 = function gcj02tobd09(lng, lat) {
var lat = +lat;
var lng = +lng;
var z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI);
var theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI);
var bd_lng = z * Math.cos(theta) + 0.0065;
var bd_lat = z * Math.sin(theta) + 0.006;
return [bd_lng, bd_lat]
};
/**
* WGS84转GCj02
* @param lng
* @param lat
* @returns {*[]}
*/
var wgs84togcj02 = function wgs84togcj02(lng, lat) {
var lat = +lat;
var lng = +lng;
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 转换为 WGS84
* @param lng
* @param lat
* @returns {*[]}
*/
var gcj02towgs84 = function gcj02towgs84(lng, lat) {
var lat = +lat;
var lng = +lng;
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 [lng * 2 - mglng, lat * 2 - mglat]
}
};
var transformlat = function transformlat(lng, lat) {
var lat = +lat;
var lng = +lng;
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
};
var transformlng = function transformlng(lng, lat) {
var lat = +lat;
var lng = +lng;
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
};
/**
* 判断是否在国内不在国内则不做偏移
* @param lng
* @param lat
* @returns {boolean}
*/
var out_of_china = function out_of_china(lng, lat) {
var lat = +lat;
var lng = +lng;
// 纬度3.86~53.55,经度73.66~135.05
return !(lng > 73.66 && lng < 135.05 && lat > 3.86 && lat < 53.55);
};
return {
bd09togcj02: bd09togcj02,
gcj02tobd09: gcj02tobd09,
wgs84togcj02: wgs84togcj02,
gcj02towgs84: gcj02towgs84
}
}));

View File

@ -0,0 +1,17 @@
# Auto detect text files and perform LF normalization
* text=auto
# Custom for Visual Studio
*.cs diff=csharp
# Standard to msysgit
*.doc diff=astextplain
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain

View File

@ -0,0 +1,75 @@
# Logs
logs
*.log
# Runtime data
pids
*.pid
*.seed
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directory
# Commenting this out is preferred by some people, see
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git-
node_modules
# Users Environment Variables
.lock-wscript
# =========================
# Operating System Files
# =========================
# OSX
# =========================
.DS_Store
.AppleDouble
.LSOverride
# Thumbnails
._*
# Files that might appear on external disk
.Spotlight-V100
.Trashes
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# Windows
# =========================
# Windows image file caches
Thumbs.db
ehthumbs.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msm
*.msp
# Windows shortcuts
*.lnk

22
mapserver/static/node_modules/coordtransform/LICENSE generated vendored Normal file
View File

@ -0,0 +1,22 @@
The MIT License (MIT)
Copyright (c) 2015 记忆的残骸
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

130
mapserver/static/node_modules/coordtransform/README.md generated vendored Normal file
View File

@ -0,0 +1,130 @@
# coordtransform 坐标转换
****
一个提供了百度坐标BD09、国测局坐标火星坐标GCJ02、和WGS84坐标系之间的转换的工具模块。
python版本https://github.com/wandergis/coordTransform_py
命令行版本https://github.com/wandergis/coordtransform-cli
****
## **支持node、浏览器AMD方式和直接引用方式**
- GitHub地址https://github.com/wandergis/coordtransform
- npm地址https://www.npmjs.com/package/coordtransform
- 项目主页http://wandergis.github.io/coordtransform/
## 为什么写这个模块
随着移动互联网的兴起几乎每一个app都会去收集用户位置如果恰好你在处理与地理定位相关的代码并且不了解地理坐标系的话肯定要被我大天朝各种坐标系搞晕。写这个模块的目的也是因为项目中app获取的坐标是百度sdk获取的在做webgis可视化的时候各种偏各种坐标不对叠加错位。
## 当前互联网地图的坐标系现状
### 地球坐标 (WGS84)
- 国际标准,从 GPS 设备中取出的数据的坐标系
- 国际地图提供商使用的坐标系
### 火星坐标 (GCJ-02)也叫国测局坐标系
- 中国标准,从国行移动设备中定位获取的坐标数据使用这个坐标系
- 国家规定: 国内出版的各种地图系统包括电子形式必须至少采用GCJ-02对地理位置进行首次加密。
###百度坐标 (BD-09)
- 百度标准,百度 SDK百度地图Geocoding 使用
- (本来就乱了,百度又在火星坐标上来个二次加密)
## 开发过程需要注意的事
- 从设备获取经纬度GPS坐标
如果使用的是百度sdk那么可以获得百度坐标bd09或者火星坐标GCJ02),默认是bd09
如果使用的是ios的原生定位库那么获得的坐标是WGS84
如果使用的是高德sdk,那么获取的坐标是GCJ02
- 互联网在线地图使用的坐标系
火星坐标系:
iOS 地图(其实是高德)
Google国内地图.cn域名下
搜搜、阿里云、高德地图、腾讯
百度坐标系:
当然只有百度地图
WGS84坐标系
国际标准谷歌国外地图、osm地图等国外的地图一般都是这个
# 举个例子
笔者所在的公司app使用的是百度的sdk,需要对定位坐标做web可视化效果百度地图提供的js api满足不了需求选用leaflet来做可视化这里要说到百度地图了它使用的坐标系和切图的原点都不一致并且其加偏还是非线性的因此无法利用常用的加载方法去加载放弃使用它的底图选用了符合标准的高德底图高德底图使用的是国测局坐标也就是GCJ02坐标系如果简单的将app获取的经纬度叠加上去就有可能你本来在百度大厦的位置就显示在西二旗地铁站了甚至更远因此需要将bd09转成gcj02坐标系这个时候这个库就有了用武之地对点批量转换再加载到底图上就可以让点显示在本应该出现的位置。
另外如果你拿到了一些WGS84的坐标想加载到各种底图上就可以根据这个库在底图坐标系和你的数据坐标系之间进行转换。希望对大家有用吧。
****
### 安装install
```
npm install coordtransform
```
### 示例用法Example&Usage
1 NodeJs用法
```
//国测局坐标(火星坐标,比如高德地图在用),百度坐标,wgs84坐标(谷歌国外以及绝大部分国外在线地图使用的坐标)
var coordtransform=require('coordtransform');
//百度经纬度坐标转国测局坐标
var bd09togcj02=coordtransform.bd09togcj02(116.404, 39.915);
//国测局坐标转百度经纬度坐标
var gcj02tobd09=coordtransform.gcj02tobd09(116.404, 39.915);
//wgs84转国测局坐标
var wgs84togcj02=coordtransform.wgs84togcj02(116.404, 39.915);
//国测局坐标转wgs84坐标
var gcj02towgs84=coordtransform.gcj02towgs84(116.404, 39.915);
console.log(bd09togcj02);
console.log(gcj02tobd09);
console.log(wgs84togcj02);
console.log(gcj02towgs84);
//result
//bd09togcj02: [ 116.39762729119315, 39.90865673957631 ]
//gcj02tobd09: [ 116.41036949371029, 39.92133699351021 ]
//wgs84togcj02: [ 116.41024449916938, 39.91640428150164 ]
//gcj02towgs84: [ 116.39775550083061, 39.91359571849836 ]
```
2 浏览器用法
直接引用目录内的index.js会有一个coordtransform的全局对象暴露出来也支持用AMD加载器加载
```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>coordTransform</title>
</head>
<body>
<h1>请按F12打开控制台查看结果</h1>
<script src="index.js"></script>
<script>
//国测局坐标(火星坐标,比如高德地图在用),百度坐标,wgs84坐标(谷歌国外以及绝大部分国外在线地图使用的坐标)
//百度经纬度坐标转国测局坐标
var bd09togcj02 = coordtransform.bd09togcj02(116.404, 39.915);
//国测局坐标转百度经纬度坐标
var gcj02tobd09 = coordtransform.gcj02tobd09(116.404, 39.915);
//wgs84转国测局坐标
var wgs84togcj02 = coordtransform.wgs84togcj02(116.404, 39.915);
//国测局坐标转wgs84坐标
var gcj02towgs84 = coordtransform.gcj02towgs84(116.404, 39.915);
console.log(bd09togcj02);
console.log(gcj02tobd09);
console.log(wgs84togcj02);
console.log(gcj02towgs84);
//result
//bd09togcj02: [ 116.39762729119315, 39.90865673957631 ]
//gcj02tobd09: [ 116.41036949371029, 39.92133699351021 ]
//wgs84togcj02: [ 116.41024449916938, 39.91640428150164 ]
//gcj02towgs84: [ 116.39775550083061, 39.91359571849836 ]
</script>
</body>
</html>
```
### todos
- 墨卡托坐标
- geojson转换
- 批量转换
- turf插件
- leaflet插件
### sometipes
对于做GIS的人来说底图对我们还是很重要的有时候看国外的底图很好看换上之后发现坐标位置全部不对因此写了这个包帮助大家完成坐标的转换也准备写成一个leaflet的扩展方便大家的使用喜欢的童鞋请starO(∩_∩)O

153
mapserver/static/node_modules/coordtransform/index.js generated vendored Normal file
View File

@ -0,0 +1,153 @@
/**
* Created by Wandergis on 2015/7/8.
* 提供了百度坐标BD09国测局坐标火星坐标GCJ02和WGS84坐标系之间的转换
*/
//UMD魔法代码
// if the module has no dependencies, the above pattern can be simplified to
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define([], factory);
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory();
} else {
// Browser globals (root is window)
root.coordtransform = factory();
}
}(this, function () {
//定义一些常量
var x_PI = 3.14159265358979324 * 3000.0 / 180.0;
var PI = 3.1415926535897932384626;
var a = 6378245.0;
var ee = 0.00669342162296594323;
/**
* 百度坐标系 (BD-09) 火星坐标系 (GCJ-02)的转换
* 百度 谷歌高德
* @param bd_lon
* @param bd_lat
* @returns {*[]}
*/
var bd09togcj02 = function bd09togcj02(bd_lon, bd_lat) {
var bd_lon = +bd_lon;
var bd_lat = +bd_lat;
var x = bd_lon - 0.0065;
var y = bd_lat - 0.006;
var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_PI);
var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_PI);
var gg_lng = z * Math.cos(theta);
var gg_lat = z * Math.sin(theta);
return [gg_lng, gg_lat]
};
/**
* 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
* 即谷歌高德 百度
* @param lng
* @param lat
* @returns {*[]}
*/
var gcj02tobd09 = function gcj02tobd09(lng, lat) {
var lat = +lat;
var lng = +lng;
var z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI);
var theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI);
var bd_lng = z * Math.cos(theta) + 0.0065;
var bd_lat = z * Math.sin(theta) + 0.006;
return [bd_lng, bd_lat]
};
/**
* WGS84转GCj02
* @param lng
* @param lat
* @returns {*[]}
*/
var wgs84togcj02 = function wgs84togcj02(lng, lat) {
var lat = +lat;
var lng = +lng;
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 转换为 WGS84
* @param lng
* @param lat
* @returns {*[]}
*/
var gcj02towgs84 = function gcj02towgs84(lng, lat) {
var lat = +lat;
var lng = +lng;
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 [lng * 2 - mglng, lat * 2 - mglat]
}
};
var transformlat = function transformlat(lng, lat) {
var lat = +lat;
var lng = +lng;
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
};
var transformlng = function transformlng(lng, lat) {
var lat = +lat;
var lng = +lng;
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
};
/**
* 判断是否在国内不在国内则不做偏移
* @param lng
* @param lat
* @returns {boolean}
*/
var out_of_china = function out_of_china(lng, lat) {
var lat = +lat;
var lng = +lng;
// 纬度3.86~53.55,经度73.66~135.05
return !(lng > 73.66 && lng < 135.05 && lat > 3.86 && lat < 53.55);
};
return {
bd09togcj02: bd09togcj02,
gcj02tobd09: gcj02tobd09,
wgs84togcj02: wgs84togcj02,
gcj02towgs84: gcj02towgs84
}
}));

View File

@ -0,0 +1,54 @@
{
"_from": "coordtransform",
"_id": "coordtransform@2.1.2",
"_inBundle": false,
"_integrity": "sha1-CQNJzWKx3AX65HspG/nwt86Cf2Y=",
"_location": "/coordtransform",
"_phantomChildren": {},
"_requested": {
"type": "tag",
"registry": true,
"raw": "coordtransform",
"name": "coordtransform",
"escapedName": "coordtransform",
"rawSpec": "",
"saveSpec": null,
"fetchSpec": "latest"
},
"_requiredBy": [
"#USER",
"/"
],
"_resolved": "https://registry.npmjs.org/coordtransform/-/coordtransform-2.1.2.tgz",
"_shasum": "090349cd62b1dc05fae47b291bf9f0b7ce827f66",
"_spec": "coordtransform",
"_where": "/home/gym/下载/gps-sdr-sim-realtime/mapserver/static",
"author": {
"name": "wandergis"
},
"bugs": {
"url": "https://github.com/wandergis/coordtransform/issues"
},
"bundleDependencies": false,
"deprecated": false,
"description": "A common coordinate systems conversion module!",
"homepage": "http://wandergis.github.io/coordtransform",
"keywords": [
"coordinate",
"wgs84",
"bd09",
"gcj02",
"transform"
],
"license": "MIT",
"main": "index.js",
"name": "coordtransform",
"repository": {
"type": "git",
"url": "git+https://wandergis@github.com/wandergis/coordtransform.git"
},
"scripts": {
"test": "node test/app.js"
},
"version": "2.1.2"
}

View File

@ -0,0 +1,22 @@
/**
* Created by WangMing on 15/11/17.
*/
//国测局坐标(火星坐标,比如高德地图在用),百度坐标,wgs84坐标(谷歌国外以及绝大部分国外在线地图使用的坐标)
var coordtransform = require('../index');
//百度经纬度坐标转国测局坐标
var bd09togcj02 = coordtransform.bd09togcj02(116.404, 39.915);
//国测局坐标转百度经纬度坐标
var gcj02tobd09 = coordtransform.gcj02tobd09(116.404, 39.915);
//wgs84转国测局坐标
var wgs84togcj02 = coordtransform.wgs84togcj02(116.404, 39.915);
//国测局坐标转wgs84坐标
var gcj02towgs84 = coordtransform.gcj02towgs84(116.404, 39.915);
console.log(bd09togcj02);
console.log(gcj02tobd09);
console.log(wgs84togcj02);
console.log(gcj02towgs84);
//result
//bd09togcj02: [ 116.39762729119315, 39.90865673957631 ]
//gcj02tobd09: [ 116.41036949371029, 39.92133699351021 ]
//wgs84togcj02: [ 116.41024449916938, 39.91640428150164 ]
//gcj02towgs84: [ 116.39775550083061, 39.91359571849836 ]

View File

@ -0,0 +1,31 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>coordTransform</title>
</head>
<body>
<h1>请按F12打开控制台查看结果(Please open console by F12)</h1>
<script src="../index.js"></script>
<script>
//国测局坐标(火星坐标,比如高德地图在用),百度坐标,wgs84坐标(谷歌国外以及绝大部分国外在线地图使用的坐标)
//百度经纬度坐标转国测局坐标
var bd09togcj02 = coordtransform.bd09togcj02(116.404, 39.915);
//国测局坐标转百度经纬度坐标
var gcj02tobd09 = coordtransform.gcj02tobd09(116.404, 39.915);
//wgs84转国测局坐标
var wgs84togcj02 = coordtransform.wgs84togcj02(116.404, 39.915);
//国测局坐标转wgs84坐标
var gcj02towgs84 = coordtransform.gcj02towgs84(116.404, 39.915);
console.log(bd09togcj02);
console.log(gcj02tobd09);
console.log(wgs84togcj02);
console.log(gcj02towgs84);
//result
//bd09togcj02: [ 116.39762729119315, 39.90865673957631 ]
//gcj02tobd09: [ 116.41036949371029, 39.92133699351021 ]
//wgs84togcj02: [ 116.41024449916938, 39.91640428150164 ]
//gcj02towgs84: [ 116.39775550083061, 39.91359571849836 ]
</script>
</body>
</html>

10
mapserver/static/package-lock.json generated Normal file
View File

@ -0,0 +1,10 @@
{
"lockfileVersion": 1,
"dependencies": {
"coordtransform": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/coordtransform/-/coordtransform-2.1.2.tgz",
"integrity": "sha1-CQNJzWKx3AX65HspG/nwt86Cf2Y="
}
}
}

42
tcp.grc
View File

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<?grc format='1' created='3.7.8'?>
<?grc format='1' created='3.7.10'?>
<flow_graph>
<timestamp>Sun Apr 23 00:42:37 2017</timestamp>
<block>
@ -8,10 +8,6 @@
<key>author</key>
<value></value>
</param>
<param>
<key>alias</key>
<value></value>
</param>
<param>
<key>window_size</key>
<value></value>
@ -44,6 +40,10 @@
<key>generate_options</key>
<value>qt_gui</value>
</param>
<param>
<key>hier_block_src_path</key>
<value>.:</value>
</param>
<param>
<key>id</key>
<value>top_block</value>
@ -52,10 +52,18 @@
<key>max_nouts</key>
<value>0</value>
</param>
<param>
<key>qt_qss_theme</key>
<value></value>
</param>
<param>
<key>realtime_scheduling</key>
<value></value>
</param>
<param>
<key>run_command</key>
<value>{python} -u {filename}</value>
</param>
<param>
<key>run_options</key>
<value>prompt</value>
@ -191,7 +199,7 @@
</param>
<param>
<key>gain0</key>
<value>0</value>
<value>17</value>
</param>
<param>
<key>ant10</key>
@ -1079,7 +1087,7 @@
</param>
<param>
<key>_coordinate</key>
<value>(712, 182)</value>
<value>(728, 216)</value>
</param>
<param>
<key>_rotation</key>
@ -1184,6 +1192,10 @@
<key>average</key>
<value>1.0</value>
</param>
<param>
<key>axislabels</key>
<value>True</value>
</param>
<param>
<key>bw</key>
<value>samp_rate</value>
@ -1452,17 +1464,29 @@
<key>wintype</key>
<value>firdes.WIN_BLACKMAN_hARRIS</value>
</param>
<param>
<key>label</key>
<value>Relative Gain</value>
</param>
<param>
<key>ymax</key>
<value>10</value>
<value>40</value>
</param>
<param>
<key>ymin</key>
<value>-140</value>
<value>-30</value>
</param>
<param>
<key>units</key>
<value>dB</value>
</param>
</block>
<block>
<key>qtgui_waterfall_sink_x</key>
<param>
<key>axislabels</key>
<value>True</value>
</param>
<param>
<key>bw</key>
<value>samp_rate</value>

54
top_block.py Normal file → Executable file
View File

@ -1,8 +1,9 @@
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
##################################################
# GNU Radio Python Flow Graph
# Title: Top Block
# Generated: Sun Apr 30 23:18:08 2017
# Generated: Fri Nov 13 09:08:57 2020
##################################################
if __name__ == '__main__':
@ -36,9 +37,9 @@ class top_block(gr.top_block, Qt.QWidget):
Qt.QWidget.__init__(self)
self.setWindowTitle("Top Block")
try:
self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
except:
pass
pass
self.top_scroll_layout = Qt.QVBoxLayout()
self.setLayout(self.top_scroll_layout)
self.top_scroll = Qt.QScrollArea()
@ -72,15 +73,16 @@ class top_block(gr.top_block, Qt.QWidget):
)
self.qtgui_waterfall_sink_x_0.set_update_time(0.10)
self.qtgui_waterfall_sink_x_0.enable_grid(False)
self.qtgui_waterfall_sink_x_0.enable_axis_labels(True)
if not True:
self.qtgui_waterfall_sink_x_0.disable_legend()
if complex == type(float()):
if "complex" == "float" or "complex" == "msg_float":
self.qtgui_waterfall_sink_x_0.set_plot_pos_half(not True)
labels = ["", "", "", "", "",
"", "", "", "", ""]
labels = ['', '', '', '', '',
'', '', '', '', '']
colors = [0, 0, 0, 0, 0,
0, 0, 0, 0, 0]
alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
@ -106,21 +108,23 @@ class top_block(gr.top_block, Qt.QWidget):
1 #number of inputs
)
self.qtgui_freq_sink_x_0.set_update_time(0.10)
self.qtgui_freq_sink_x_0.set_y_axis(-140, 10)
self.qtgui_freq_sink_x_0.set_y_axis(-30, 40)
self.qtgui_freq_sink_x_0.set_y_label('Relative Gain', 'dB')
self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "")
self.qtgui_freq_sink_x_0.enable_autoscale(False)
self.qtgui_freq_sink_x_0.enable_grid(False)
self.qtgui_freq_sink_x_0.set_fft_average(1.0)
self.qtgui_freq_sink_x_0.enable_axis_labels(True)
self.qtgui_freq_sink_x_0.enable_control_panel(False)
if not True:
self.qtgui_freq_sink_x_0.disable_legend()
if complex == type(float()):
if "complex" == "float" or "complex" == "msg_float":
self.qtgui_freq_sink_x_0.set_plot_pos_half(not True)
labels = ["", "", "", "", "",
"", "", "", "", ""]
labels = ['', '', '', '', '',
'', '', '', '', '']
widths = [1, 1, 1, 1, 1,
1, 1, 1, 1, 1]
colors = ["blue", "red", "green", "black", "cyan",
@ -138,20 +142,20 @@ class top_block(gr.top_block, Qt.QWidget):
self._qtgui_freq_sink_x_0_win = sip.wrapinstance(self.qtgui_freq_sink_x_0.pyqwidget(), Qt.QWidget)
self.top_layout.addWidget(self._qtgui_freq_sink_x_0_win)
self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + "hackrf=81320f" )
self.osmosdr_sink_0.set_clock_source("external", 0)
self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + 'hackrf=81320f' )
self.osmosdr_sink_0.set_clock_source('external', 0)
self.osmosdr_sink_0.set_sample_rate(samp_rate)
self.osmosdr_sink_0.set_center_freq(1575420000, 0)
self.osmosdr_sink_0.set_freq_corr(0, 0)
self.osmosdr_sink_0.set_gain(0, 0)
self.osmosdr_sink_0.set_gain(17, 0)
self.osmosdr_sink_0.set_if_gain(20, 0)
self.osmosdr_sink_0.set_bb_gain(20, 0)
self.osmosdr_sink_0.set_antenna("RX/TX", 0)
self.osmosdr_sink_0.set_antenna('RX/TX', 0)
self.osmosdr_sink_0.set_bandwidth(2600000, 0)
self.blks2_tcp_source_0 = grc_blks2.tcp_source(
itemsize=gr.sizeof_gr_complex*1,
addr="127.0.0.1",
addr='127.0.0.1',
port=1234,
server=True,
)
@ -174,19 +178,20 @@ class top_block(gr.top_block, Qt.QWidget):
def set_samp_rate(self, samp_rate):
self.samp_rate = samp_rate
self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
self.qtgui_freq_sink_x_0.set_frequency_range(0, self.samp_rate)
self.qtgui_waterfall_sink_x_0.set_frequency_range(0, self.samp_rate)
self.qtgui_freq_sink_x_0.set_frequency_range(0, self.samp_rate)
self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
if __name__ == '__main__':
parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
(options, args) = parser.parse_args()
def main(top_block_cls=top_block, options=None):
from distutils.version import StrictVersion
if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"):
Qt.QApplication.setGraphicsSystem(gr.prefs().get_string('qtgui','style','raster'))
style = gr.prefs().get_string('qtgui', 'style', 'raster')
Qt.QApplication.setGraphicsSystem(style)
qapp = Qt.QApplication(sys.argv)
tb = top_block()
tb = top_block_cls()
tb.start()
tb.show()
@ -195,4 +200,7 @@ if __name__ == '__main__':
tb.wait()
qapp.connect(qapp, Qt.SIGNAL("aboutToQuit()"), quitting)
qapp.exec_()
tb = None # to clean up Qt widgets
if __name__ == '__main__':
main()