#!/usr/bin/env python
# coding: utf-8
# In[ ]:
import re
import os
import sys
import json
import nltk
import time
import pickle
import random
import base64
import datetime
import requests
import openpyxl
import readline
import itertools
import numpy as np
import pandas as pd
from PIL import Image
from tqdm import tqdm, trange
from bs4 import BeautifulSoup
import matplotlib.pyplot as plt
from collections import Counter
from pypinyin import lazy_pinyin, Style
from joblib import Parallel, delayed
from sklearn.linear_model import LinearRegression
import warnings
warnings.filterwarnings('ignore')
pd.set_option('display.width', 500)
pd.set_option('display.max_rows', 200)
pd.set_option('display.max_columns', 200)
pd.set_option('display.max_colwidth', 1000)
# step 1: 浙江省边界数据
zjbj_url = "https://up.caup.net/guihuayun/json/330000.json"
zjbj_datas = requests.get( zjbj_url )
zjbj_datas_json = json.loads( zjbj_datas.content )
zjbj_datas_json_list = zjbj_datas_json['geometry']['coordinates'][-1]
zjbj_points = zjbj_datas_json_list[0]
zjbj_merged_points = merge_points( zjbj_points, threshold=5000 )
print( len(zjbj_merged_points), len( zjbj_points ) )
# step 2: 杭州市边界数据
hzbj_url = "https://up.caup.net/guihuayun/json/330100.json"
datas = requests.get( hzbj_url )
datas_json = json.loads( datas.content )
datas_json_list = datas_json['geometry']['coordinates'][0]
points = datas_json_list
merged_points = merge_points(points, threshold=4000)
print(len(merged_points), len(points))
# In[ ]:
import math
EARTH_RADIUS = 6371000 # 地球平均半径,单位:米
def haversine(lat1, lon1, lat2, lon2):
"""计算两个经纬度点之间的距离(单位:米)"""
lat1, lon1, lat2, lon2 = map(math.radians, [lat1, lon1, lat2, lon2]) # 将经纬度转换为弧度
dlon = lon2 - lon1 # Haversine公式
dlat = lat2 - lat1
a = math.sin(dlat/2)**2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon/2)**2
c = 2 * math.asin(math.sqrt(a))
r = EARTH_RADIUS
return c * r
def merge_points(points, threshold=10):
"""合并距离在threshold(单位:米)以内的经纬度点"""
merged_points = []
merged_points.append( points[0] )
for point in points:
distance = haversine( point[0], point[1], merged_points[-1][0], merged_points[-1][1] )
if distance <= threshold:
continue
else:
merged_points.append( point )
return merged_points
# step 1: 浙江省边界数据
zjbj_url = "https://up.caup.net/guihuayun/json/330000.json"
zjbj_datas = requests.get( zjbj_url )
zjbj_datas_json = json.loads( zjbj_datas.content )
zjbj_datas_json_list = zjbj_datas_json['geometry']['coordinates'][-1]
zjbj_points = zjbj_datas_json_list[0]
zjbj_merged_points = merge_points( zjbj_points, threshold=5000 )
print( len(zjbj_merged_points), len( zjbj_points ) )
# step 2: 杭州市边界数据
hzbj_url = "https://up.caup.net/guihuayun/json/330100.json"
datas = requests.get( hzbj_url )
datas_json = json.loads( datas.content )
datas_json_list = datas_json['geometry']['coordinates'][0]
points = datas_json_list
merged_points = merge_points(points, threshold=4000)
print(len(merged_points), len(points))
import folium
import pandas as pd
_titles = 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}'
_gd_tiles='http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}'
san_map=folium.Map(location=[30.245853, 120.209947], zoom_start=14, tiles= _gd_tiles, attr='default')
data=pd.read_excel(r'.\gsddw_youli.xlsx')
data2 = data[['youli_dz', 'youli_jd', 'youli_wd']]
data2.columns = ['qymc','lng','lat']
data2 = data2[(data2.lng.notna()) & (data2.lng>118) & (data2.lng<121)]
# data=pd.read_csv('./stlz.csv',encoding='gbk')
data2.head(3)
for ii in data2.iterrows():
qymc, lon, lat = ii[1][0], ii[1][1], ii[1][2]
folium.Marker([lat,lon], popup=folium.Popup(qymc, max_width=100), tooltip=qymc, icon=folium.Icon(icon='cloud', color='green')).add_to(san_map)
folium.Circle([lat,lon], 500, color='yellow', fill_color='yellow', fillOpacity=0.3).add_to(san_map)
for ii in merged_points:
lon, lat = ii[0], ii[1]
folium.Marker([lat, lon], popup=folium.Popup(qymc, max_width=100), tooltip=qymc, icon=folium.Icon(color='red', icon='info-sign')).add_to(san_map)
folium.Circle([lat, lon], 500, color='red', fill_color='red', fillOpacity=0.3).add_to(san_map)
for ii in zjbj_merged_points:
lon, lat = ii[0], ii[1]
folium.Marker([lat, lon], popup=folium.Popup(qymc, max_width=100), tooltip=qymc, icon=folium.Icon(color='blue', icon='info-sign')).add_to(san_map)
folium.Circle([lat, lon], 500, color='blue', fill_color='blue', fillOpacity=0.3).add_to(san_map)
san_map.save('sy_youli_vis.html')
html_lis_vis = open( r'./sy_youli_vis.html', encoding='utf8').readlines()
html_str_vis = ''.join(html_lis_vis)
html_str_vis2 = html_str_vis.replace( 'https://cdn.jsdelivr.net/npm/
[email protected]/dist/leaflet.js','./leaflet.js' ) .replace( 'https://code.jquery.com/jquery-3.7.1.min.js','./jquery-3.7.1.min.js' )
# .replace( 'https://cdn.jsdelivr.net/npm/
[email protected]/dist/js/bootstrap.bundle.min.js','./bootstrap.bundle.min.js' ) \
# .replace( 'https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js','./leaflet.awesome-markers.js' ) \
# .replace( 'https://cdn.jsdelivr.net/npm/
[email protected]/dist/leaflet.css','./leaflet.css' ) \
# .replace( 'https://cdn.jsdelivr.net/npm/
[email protected]/dist/css/bootstrap.min.css','./bootstrap.min.css' ) \
# .replace( 'https://cdn.jsdelivr.net/npm/@fortawesome/
[email protected]/css/all.min.css','./all.min.css' ) \
# .replace( 'https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css','./leaflet.awesome-markers.css' ) \
# .replace( 'https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css','./bootstrap.min.css' )
html_str_vis2_html = r"sy_youli_vis_new.html"
f = open( html_str_vis2_html,'w', encoding='utf8')
f.write( html_str_vis2 )
f.close()