transbigdata lab


import pandas as pd
import numpy as np
import geopandas as gpd
import transbigdata as tbd
import networkx as nx
import warnings
warnings.filterwarnings('ignore')
line,stop = tbd.getbusdata('昆明市',['1号线','2号线','3号线','4号线'])
line.plot()
stop.plot()
metroline_splited = tbd.split_subwayline(line,stop)
metroline_splited.plot(column = pd.Series(metroline_splited.index))

#Modeling for subway network topology
line['speed'] = 60 #operation speed 55km/h
line['stoptime'] = 50 #stop time at each stations 50s
G = tbd.metro_network(line,stop, transfertime=50)
nx.draw(G,node_size=200)

path = tbd.get_shortest_path(G,stop,'','')
path
Obtaining city id: 昆明市success
Get bus data: 1号线
地铁1号线(环城南路-大学城南) success
地铁1号线(大学城南-环城南路) success
地铁1号线(昆明南火车站-环城南路) success
地铁1号线(环城南路-昆明南火车站) success
Get bus data: 2号线
地铁2号线(环城南路-北部汽车站) success
地铁2号线(北部汽车站-环城南路) success
地铁2号线二期(环城南路-海东公园) success
地铁2号线二期(海东公园-环城南路) success
Get bus data: 3号线
地铁3号线(东部汽车站-西山公园) success
地铁3号线(西山公园-东部汽车站) success
观鸥三号线(拓东体育馆(东风东路)-海埂大坝车场) success
观鸥三号线(海埂大坝车场-拓东体育馆(东风东路)) success
Get bus data: 4号线
地铁4号线(金川路-昆明南火车站) success
地铁4号线(昆明南火车站-金川路) success
观鸥四号线(官渡广场(国贸路)-海埂大坝车场) success
观鸥四号线(海埂大坝车场-官渡广场(国贸路)) success



---------------------------------------------------------------------------

IndexError                                Traceback (most recent call last)

Cell In[1], line 20
     17 G = tbd.metro_network(line,stop, transfertime=50)
     18 nx.draw(G,node_size=200)
---> 20 path = tbd.get_shortest_path(G,stop,'','')
     21 path


File D:\python\3.12版本\Lib\site-packages\transbigdata\metro.py:213, in get_shortest_path(G, stop, ostation, dstation)
    191 '''
    192 Obtain the travel path of shortest path from the metro nextwork
    193 
   (...)
    210     travel path: list of station names
    211 '''
    212 import networkx as nx
--> 213 o = stop[stop['stationnames'] == ostation]['line'].iloc[0]+ostation
    214 d = stop[stop['stationnames'] == dstation]['line'].iloc[0]+dstation
    215 return nx.shortest_path(G, source=o, target=d, weight='weight')


File D:\python\3.12版本\Lib\site-packages\pandas\core\indexing.py:1153, in _LocationIndexer.__getitem__(self, key)
   1150 axis = self.axis or 0
   1152 maybe_callable = com.apply_if_callable(key, self.obj)
-> 1153 return self._getitem_axis(maybe_callable, axis=axis)


File D:\python\3.12版本\Lib\site-packages\pandas\core\indexing.py:1714, in _iLocIndexer._getitem_axis(self, key, axis)
   1711     raise TypeError("Cannot index by location index with a non-integer key")
   1713 # validate the location
-> 1714 self._validate_integer(key, axis)
   1716 return self.obj._ixs(key, axis=axis)


File D:\python\3.12版本\Lib\site-packages\pandas\core\indexing.py:1647, in _iLocIndexer._validate_integer(self, key, axis)
   1645 len_axis = len(self.obj._get_axis(axis))
   1646 if key >= len_axis or key < -len_axis:
-> 1647     raise IndexError("single positional indexer is out-of-bounds")


IndexError: single positional indexer is out-of-bounds

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

transbigdata

import pandas as pd
import numpy as np
import geopandas as gpd
import transbigdata as tbd
import networkx as nx
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['fangsong']  # 设置中文字体为仿宋
plt.rcParams['axes.unicode_minus'] = False     # 用来正常显示负号

km = gpd.read_file(r'C:\Users\Redmi\Desktop\GIS\课程作业\全国公交路线信息\云南\km.json')
km.crs = None
km.head()
fig = plt.figure(1, (13, 5), dpi=150)
ax1 = plt.subplot(111)
km.plot(ax=ax1)
plt.title('昆明市json图(ruomu hu)')
plt.xticks([], fontsize=10)
plt.yticks([], fontsize=10);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Transbigdata 练习

import osmnx as ox
import matplotlib.pyplot as plt
streets_graph = ox.graph_from_place('云南, 昆明', network_type='drive')#address:Los Angeles城市名,California
streets_graph = ox.projection.project_graph(streets_graph)

streets = ox.graph_to_gdfs(ox.get_undirected(streets_graph), nodes=False, edges=True,
                                   node_geometry=False, fill_edge_geometry=True)
f, ax = plt.subplots(figsize=(10, 10))
streets.plot(ax=ax, linewidth=0.2)
ax.set_axis_off()
plt.show()

Osmnx

import osmnx as ox
import networkx as nx

#根据点和半径获取地图
wurster_hall = (24.86,102.86)
one_mile = 1500  # meters
G = ox.graph_from_point(wurster_hall, dist=one_mile, network_type="drive")
fig, ax = ox.plot_graph(G, node_size=0)

#获取地点中的具体设施,可视化
G = ox.graph_from_place(
    "New York, New York, USA",
    retain_all=False,
    truncate_by_edge=True,
    simplify=True,
    custom_filter='["railway"~"subway"]',
)
fig, ax = ox.plot_graph(G, node_size=0, edge_color="w", edge_linewidth=0.2)

#获取设施的几何,可视化
place = "Civic Center, Los Angeles, California"
tags = {"building": True}
gdf = ox.geometries_from_place(place, tags)
fig, ax = ox.plot_footprints(gdf, figsize=(3, 3))

#根据地点获取路网,并可视化
G = ox.graph_from_place("kunming, yunnan, china", network_type="drive")
fig, ax = ox.plot_graph(G)

#将图结构的路网转变成geopandas格式的节点和边
gdf_nodes, gdf_edges = ox.graph_to_gdfs(G)
gdf_nodes.head()

# 将geopandas格式的边和节点转变成Networkx的图
G2 = ox.graph_from_gdfs(gdf_nodes, gdf_edges, graph_attrs=G.graph)

# 计算边的中心度,赋予边权重,并渲染出来
edge_centrality = nx.closeness_centrality(nx.line_graph(G))
nx.set_edge_attributes(G, edge_centrality, "edge_centrality")
edge_centrality = nx.closeness_centrality(nx.line_graph(G))
nx.set_edge_attributes(G, edge_centrality, "edge_centrality")

#最短路径搜索
#为网络添加速度和旅行时间
G = ox.speed.add_edge_speeds(G)
G = ox.speed.add_edge_travel_times(G)
# 将节点匹配到网络的最近路段上
orig = ox.distance.nearest_nodes(G, X=-122.245846, Y=37.828903)
dest = ox.distance.nearest_nodes(G, X=-122.215006, Y=37.812303)
# 生成最短路径并渲染
route = ox.shortest_path(G, orig, dest, weight="travel_time")
fig, ax = ox.plot_graph_route(G, route, node_size=0)
#路径长度计算
edge_lengths = ox.utils_graph.get_route_edge_attributes(G, route, "length")
round(sum(edge_lengths))

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

---------------------------------------------------------------------------

TimeoutError                              Traceback (most recent call last)

File D:\python\3.12版本\Lib\site-packages\urllib3\connection.py:174, in HTTPConnection._new_conn(self)
    173 try:
--> 174     conn = connection.create_connection(
    175         (self._dns_host, self.port), self.timeout, **extra_kw
    176     )
    178 except SocketTimeout:


File D:\python\3.12版本\Lib\site-packages\urllib3\util\connection.py:95, in create_connection(address, timeout, source_address, socket_options)
     94 if err is not None:
---> 95     raise err
     97 raise socket.error("getaddrinfo returns an empty list")


File D:\python\3.12版本\Lib\site-packages\urllib3\util\connection.py:85, in create_connection(address, timeout, source_address, socket_options)
     84     sock.bind(source_address)
---> 85 sock.connect(sa)
     86 return sock


TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。


During handling of the above exception, another exception occurred:


ConnectTimeoutError                       Traceback (most recent call last)

File D:\python\3.12版本\Lib\site-packages\urllib3\connectionpool.py:715, in HTTPConnectionPool.urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    714 # Make the request on the httplib connection object.
--> 715 httplib_response = self._make_request(
    716     conn,
    717     method,
    718     url,
    719     timeout=timeout_obj,
    720     body=body,
    721     headers=headers,
    722     chunked=chunked,
    723 )
    725 # If we're going to release the connection in ``finally:``, then
    726 # the response doesn't need to know about the connection. Otherwise
    727 # it will also try to release it and we'll have a double-release
    728 # mess.


File D:\python\3.12版本\Lib\site-packages\urllib3\connectionpool.py:404, in HTTPConnectionPool._make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw)
    403 try:
--> 404     self._validate_conn(conn)
    405 except (SocketTimeout, BaseSSLError) as e:
    406     # Py2 raises this as a BaseSSLError, Py3 raises it as socket timeout.


File D:\python\3.12版本\Lib\site-packages\urllib3\connectionpool.py:1060, in HTTPSConnectionPool._validate_conn(self, conn)
   1059 if not getattr(conn, "sock", None):  # AppEngine might not have  `.sock`
-> 1060     conn.connect()
   1062 if not conn.is_verified:


File D:\python\3.12版本\Lib\site-packages\urllib3\connection.py:363, in HTTPSConnection.connect(self)
    361 def connect(self):
    362     # Add certificate verification
--> 363     self.sock = conn = self._new_conn()
    364     hostname = self.host


File D:\python\3.12版本\Lib\site-packages\urllib3\connection.py:179, in HTTPConnection._new_conn(self)
    178 except SocketTimeout:
--> 179     raise ConnectTimeoutError(
    180         self,
    181         "Connection to %s timed out. (connect timeout=%s)"
    182         % (self.host, self.timeout),
    183     )
    185 except SocketError as e:


ConnectTimeoutError: (<urllib3.connection.HTTPSConnection object at 0x0000012860BA48F0>, 'Connection to nominatim.openstreetmap.org timed out. (connect timeout=180)')


During handling of the above exception, another exception occurred:


MaxRetryError                             Traceback (most recent call last)

File D:\python\3.12版本\Lib\site-packages\requests\adapters.py:486, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies)
    485 try:
--> 486     resp = conn.urlopen(
    487         method=request.method,
    488         url=url,
    489         body=request.body,
    490         headers=request.headers,
    491         redirect=False,
    492         assert_same_host=False,
    493         preload_content=False,
    494         decode_content=False,
    495         retries=self.max_retries,
    496         timeout=timeout,
    497         chunked=chunked,
    498     )
    500 except (ProtocolError, OSError) as err:


File D:\python\3.12版本\Lib\site-packages\urllib3\connectionpool.py:801, in HTTPConnectionPool.urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    799     e = ProtocolError("Connection aborted.", e)
--> 801 retries = retries.increment(
    802     method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
    803 )
    804 retries.sleep()


File D:\python\3.12版本\Lib\site-packages\urllib3\util\retry.py:594, in Retry.increment(self, method, url, response, error, _pool, _stacktrace)
    593 if new_retry.is_exhausted():
--> 594     raise MaxRetryError(_pool, url, error or ResponseError(cause))
    596 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry)


MaxRetryError: HTTPSConnectionPool(host='nominatim.openstreetmap.org', port=443): Max retries exceeded with url: /search?format=json&polygon_geojson=1&dedupe=0&limit=50&q=New+York%2C+New+York%2C+USA (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object at 0x0000012860BA48F0>, 'Connection to nominatim.openstreetmap.org timed out. (connect timeout=180)'))


During handling of the above exception, another exception occurred:


ConnectTimeout                            Traceback (most recent call last)

Cell In[5], line 11
      8 fig, ax = ox.plot_graph(G, node_size=0)
     10 #获取地点中的具体设施,可视化
---> 11 G = ox.graph_from_place(
     12     "New York, New York, USA",
     13     retain_all=False,
     14     truncate_by_edge=True,
     15     simplify=True,
     16     custom_filter='["railway"~"subway"]',
     17 )
     18 fig, ax = ox.plot_graph(G, node_size=0, edge_color="w", edge_linewidth=0.2)
     20 #获取设施的几何,可视化


File D:\python\3.12版本\Lib\site-packages\osmnx\graph.py:379, in graph_from_place(query, network_type, simplify, retain_all, truncate_by_edge, which_result, buffer_dist, clean_periphery, custom_filter)
    375 # create a GeoDataFrame with the spatial boundaries of the place(s)
    376 if isinstance(query, (str, dict)):
    377     # if it is a string (place name) or dict (structured place query),
    378     # then it is a single place
--> 379     gdf_place = geocoder.geocode_to_gdf(
    380         query, which_result=which_result, buffer_dist=buffer_dist
    381     )
    382 elif isinstance(query, list):
    383     # if it is a list, it contains multiple places to get
    384     gdf_place = geocoder.geocode_to_gdf(query, buffer_dist=buffer_dist)


File D:\python\3.12版本\Lib\site-packages\osmnx\geocoder.py:138, in geocode_to_gdf(query, which_result, by_osmid, buffer_dist)
    136 gdf = gpd.GeoDataFrame()
    137 for q, wr in zip(query, which_result):
--> 138     gdf = pd.concat([gdf, _geocode_query_to_gdf(q, wr, by_osmid)])
    140 # reset GeoDataFrame index and set its CRS
    141 gdf = gdf.reset_index(drop=True)


File D:\python\3.12版本\Lib\site-packages\osmnx\geocoder.py:179, in _geocode_query_to_gdf(query, which_result, by_osmid)
    157 """
    158 Geocode a single place query to a GeoDataFrame.
    159 
   (...)
    175     a GeoDataFrame with one row containing the result of geocoding
    176 """
    177 limit = 50 if which_result is None else which_result
--> 179 results = _nominatim._download_nominatim_element(query, by_osmid=by_osmid, limit=limit)
    181 # choose the right result from the JSON response
    182 if not results:
    183     # if no results were returned, raise error


File D:\python\3.12版本\Lib\site-packages\osmnx\_nominatim.py:64, in _download_nominatim_element(query, by_osmid, limit, polygon_geojson)
     61         raise TypeError(msg)
     63 # request the URL, return the JSON
---> 64 return _nominatim_request(params=params, request_type=request_type)


File D:\python\3.12版本\Lib\site-packages\osmnx\_nominatim.py:106, in _nominatim_request(params, request_type, pause, error_pause)
    104 # transmit the HTTP GET request
    105 utils.log(f"Get {prepared_url} with timeout={settings.timeout}")
--> 106 response = requests.get(
    107     url,
    108     params=params,
    109     timeout=settings.timeout,
    110     headers=_downloader._get_http_headers(),
    111     **settings.requests_kwargs,
    112 )
    114 # handle 429 and 504 errors by pausing then recursively re-trying request
    115 if response.status_code in {429, 504}:  # pragma: no cover


File D:\python\3.12版本\Lib\site-packages\requests\api.py:73, in get(url, params, **kwargs)
     62 def get(url, params=None, **kwargs):
     63     r"""Sends a GET request.
     64 
     65     :param url: URL for the new :class:`Request` object.
   (...)
     70     :rtype: requests.Response
     71     """
---> 73     return request("get", url, params=params, **kwargs)


File D:\python\3.12版本\Lib\site-packages\requests\api.py:59, in request(method, url, **kwargs)
     55 # By using the 'with' statement we are sure the session is closed, thus we
     56 # avoid leaving sockets open which can trigger a ResourceWarning in some
     57 # cases, and look like a memory leak in others.
     58 with sessions.Session() as session:
---> 59     return session.request(method=method, url=url, **kwargs)


File D:\python\3.12版本\Lib\site-packages\requests\sessions.py:589, in Session.request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    584 send_kwargs = {
    585     "timeout": timeout,
    586     "allow_redirects": allow_redirects,
    587 }
    588 send_kwargs.update(settings)
--> 589 resp = self.send(prep, **send_kwargs)
    591 return resp


File D:\python\3.12版本\Lib\site-packages\requests\sessions.py:703, in Session.send(self, request, **kwargs)
    700 start = preferred_clock()
    702 # Send the request
--> 703 r = adapter.send(request, **kwargs)
    705 # Total elapsed time of the request (approximately)
    706 elapsed = preferred_clock() - start


File D:\python\3.12版本\Lib\site-packages\requests\adapters.py:507, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies)
    504 if isinstance(e.reason, ConnectTimeoutError):
    505     # TODO: Remove this in 3.0.0: see #2811
    506     if not isinstance(e.reason, NewConnectionError):
--> 507         raise ConnectTimeout(e, request=request)
    509 if isinstance(e.reason, ResponseError):
    510     raise RetryError(e, request=request)


ConnectTimeout: HTTPSConnectionPool(host='nominatim.openstreetmap.org', port=443): Max retries exceeded with url: /search?format=json&polygon_geojson=1&dedupe=0&limit=50&q=New+York%2C+New+York%2C+USA (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object at 0x0000012860BA48F0>, 'Connection to nominatim.openstreetmap.org timed out. (connect timeout=180)'))

数据分析

import pandas as pd
import json
import matplotlib.pyplot as plt

# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300

# 正常显示中文
plt.rcParams['font.sans-serif'] = ['fangso']

# 正常显示负号
plt.rcParams['axes.unicode_minus'] = False

# 加载数据
data = []
with open(r'C:\Users\Redmi\Desktop\数据集\交通流.txt', encoding='utf-8') as file:
    for line in file:
        obj = pd.json_normalize(eval(line))
        # 对 stats 列进行处理,将其展开并与原数据合并
        stats_df = pd.json_normalize(obj['stats'].explode())
        combined_df = pd.concat([obj.drop('stats', axis=1).reset_index(drop=True), stats_df], axis=1)
        data.append(combined_df)

# 将所有 DataFrame 合并成一个
df = pd.concat(data, ignore_index=True)
df
genTimenodeId.regionnodeId.nodeIdstatType.interval.intervalmapElementTypeptcTypevehicleTypetimestampdensitymapElement.laneStatInfo.laneId...mapElement.laneStatInfo.linkStatInfo.nodeStatInfo.nodeId.nodeIdmapElement.laneStatInfo.extIdcongestiondelayspeedAreaqueueLengthvolumemapElement.movementStatInfo.turnDirectionmapElement.movementStatInfo.nodeStatInfo.nodeId.regionmapElement.movementStatInfo.nodeStatInfo.nodeId.nodeId
017392792831101MAP_ELEMENT_TYPE_LANEOBJECTTYPE_MOTORPASSENGER_VEHICLE_TYPE_UNKNOWN17392792834653359.01.032088e+09...10.03079293404110025631NaNNaNNaNNaNNaNNaNNaNNaN
117392792831101MAP_ELEMENT_TYPE_LANEOBJECTTYPE_MOTORPASSENGER_VEHICLE_TYPE_UNKNOWN17392792834664135.03.767599e+09...10.03079293404110055961NaNNaNNaNNaNNaNNaNNaNNaN
217392792831101MAP_ELEMENT_TYPE_LANEOBJECTTYPE_MOTORPASSENGER_VEHICLE_TYPE_UNKNOWN1739279283466NaN1.367934e+09...10.030792934041100256194.0NaNNaNNaNNaNNaNNaNNaN
317392792831101MAP_ELEMENT_TYPE_LANEOBJECTTYPE_MOTORPASSENGER_VEHICLE_TYPE_UNKNOWN1739279283466NaN1.032088e+09...10.03079293404110025631NaN2625.0NaNNaNNaNNaNNaNNaN
417392792831101MAP_ELEMENT_TYPE_LANEOBJECTTYPE_MOTORPASSENGER_VEHICLE_TYPE_UNKNOWN1739279283466NaN1.032088e+09...10.030792934041100256314.0NaNNaNNaNNaNNaNNaNNaN
..................................................................
8642417392901981101MAP_ELEMENT_TYPE_LANEOBJECTTYPE_MOTORPASSENGER_VEHICLE_TYPE_UNKNOWN1739290198463569.03.432194e+09...10.03079293404110055955NaNNaNNaNNaNNaNNaNNaNNaN
8642517392901981101MAP_ELEMENT_TYPE_LANEOBJECTTYPE_MOTORPASSENGER_VEHICLE_TYPE_UNKNOWN1739290198463NaN3.432194e+09...10.030792934041100559554.0NaNNaNNaNNaNNaNNaNNaN
8642617392901991101MAP_ELEMENT_TYPE_LANEOBJECTTYPE_MOTORPASSENGER_VEHICLE_TYPE_UNKNOWN1739290199467NaN3.432194e+09...10.03079293404110055955NaN1320.0NaNNaNNaNNaNNaNNaN
8642717392901991101MAP_ELEMENT_TYPE_LANEOBJECTTYPE_MOTORPASSENGER_VEHICLE_TYPE_UNKNOWN1739290199468569.03.432194e+09...10.03079293404110055955NaNNaNNaNNaNNaNNaNNaNNaN
8642817392901991101MAP_ELEMENT_TYPE_LANEOBJECTTYPE_MOTORPASSENGER_VEHICLE_TYPE_UNKNOWN1739290199468NaN3.432194e+09...10.030792934041100559554.0NaNNaNNaNNaNNaNNaNNaN

86429 rows × 22 columns

轨迹

import transbigdata as tbd
import pandas as pd

#Read_data
data = pd.read_csv(r'C:\Users\Redmi\Desktop\数据集\第6章-出租车 GPS 数据-时空大数据处理基础\第6章-出租车 GPS 数据-时空大数据处理基础\data\TaxiData-Sample.csv') 
data.columns = ['VehicleNum','Time','Lng','Lat','OpenStatus','Speed']
data
VehicleNumTimeLngLatOpenStatusSpeed
03474520:24:07113.80989822.62739900
13474520:24:27113.80989822.62739900
23474520:22:07113.81134822.62806700
33474520:10:06113.81988522.647800054
43474519:59:48113.82021322.674967023
.....................
5449932826521:35:13114.32150322.709499018
5449942826509:08:02114.32270122.68170000
5449952826509:14:31114.33670022.69010000
5449962826521:19:12114.35260022.72839900
5449972826519:08:06114.13770322.62170000

544998 rows × 6 columns

from leuvenmapmatching.matcher.distance import DistanceMatcher
from leuvenmapmatching.map.inmem import InMemMap
from leuvenmapmatching import visualization as mmviz
#obtain OD from trajectory data
oddata = tbd.taxigps_to_od(data,col = ['VehicleNum','Time','Lng','Lat','OpenStatus'])
#extract deliver and idle trip trajectories
data_deliver,data_idle = tbd.taxigps_traj_point(data,oddata,col=['VehicleNum', 'Time', 'Lng', 'Lat', 'OpenStatus'])
# obtain road network
import osmnx as ox
bounds = [113.75, 22.4, 114.62, 22.86]
north, south, east, west = bounds[3], bounds[1], bounds[2], bounds[0]
G = ox.graph_from_bbox(north, south, east, west, network_type='drive')
oddata
C:\Users\Redmi\AppData\Local\Temp\ipykernel_18932\84526281.py:9: FutureWarning: The `north`, `south`, `east`, and `west` parameters are deprecated and will be removed in the v2.0.0 release. Use the `bbox` parameter instead.
  G = ox.graph_from_bbox(north, south, east, west, network_type='drive')
VehicleNumstimeslonslatetimeelonelatID
199992239600:19:41114.01301622.66481800:23:01114.02140022.6639180
200932239600:41:51114.02176722.64020000:43:44114.02607022.6402661
202162239600:45:44114.02809922.64508200:47:44114.03038022.6500172
190922239601:08:26114.03489722.61630101:16:34114.03561422.6467173
197112239601:26:06114.04602122.64125101:34:48114.06604822.6361834
...........................
1836513680522:49:12114.11436522.55063222:50:40114.11550122.5579835811
1830363680522:52:07114.11540222.55808323:03:12114.11848422.5478675812
1803313680523:03:45114.11848422.54786723:20:09114.13328622.6177505813
1818033680523:36:19114.11296822.54960123:43:12114.08948522.5389185814
1808983680523:46:14114.09121722.54076823:53:36114.12035422.5443005815

5816 rows × 8 columns

#save road network
ox.save_graphml(G,'shenzhen.graphml')
# Read the road network
import osmnx as ox
filepath = "shenzhen.graphml"
G = ox.load_graphml(filepath)
#Obtain the road GeoDataFrame and road centroid
nodes, edges = ox.graph_to_gdfs(G, nodes=True, edges=True)
edges['lon'] = edges.centroid.x
edges['lat'] = edges.centroid.y
#convert to projection coordinates
G_p = ox.project_graph(G, to_crs=2416)
nodes_p, edges_p = ox.graph_to_gdfs(G_p, nodes=True, edges=True)
edges_p.plot()
C:\Users\Redmi\AppData\Local\Temp\ipykernel_18932\1208862378.py:7: UserWarning: Geometry is in a geographic CRS. Results from 'centroid' are likely incorrect. Use 'GeoSeries.to_crs()' to re-project geometries to a projected CRS before this operation.

  edges['lon'] = edges.centroid.x
C:\Users\Redmi\AppData\Local\Temp\ipykernel_18932\1208862378.py:8: UserWarning: Geometry is in a geographic CRS. Results from 'centroid' are likely incorrect. Use 'GeoSeries.to_crs()' to re-project geometries to a projected CRS before this operation.

  edges['lat'] = edges.centroid.y





<Axes: >

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

# create road network
map_con = InMemMap(name='pNEUMA', use_latlon=False) # , use_rtree=True, index_edges=True)

for node_id, row in nodes_p.iterrows():
    map_con.add_node(node_id, (row['y'], row['x']))
for node_id_1, node_id_2, _ in G_p.edges:
    map_con.add_edge(node_id_1, node_id_2)
# Extract one of the trajectory using transbigdata
import geopandas as gpd
tmp_gdf = data_deliver[data_deliver['ID'] == 27].sort_values(by='Time')
# trajectory densify
tmp_gdf = tbd.traj_densify(
    tmp_gdf, col=['ID', 'Time', 'Lng', 'Lat'], timegap=15)
# convert coordinate
tmp_gdf['geometry'] = gpd.points_from_xy(tmp_gdf['Lng'], tmp_gdf['Lat'])
tmp_gdf = gpd.GeoDataFrame(tmp_gdf)
tmp_gdf.crs = {'init': 'epsg:4326'}
tmp_gdf = tmp_gdf.to_crs(2416)
# obtain trajectoies
path = list(zip(tmp_gdf.geometry.y, tmp_gdf.geometry.x))
# create mapmatcher
matcher = DistanceMatcher(map_con,
                          max_dist=500,
                          max_dist_init=170,
                          min_prob_norm=0.0001,
                          non_emitting_length_factor=0.95,
                          obs_noise=50,
                          obs_noise_ne=50,
                          dist_noise=50,
                          max_lattice_width=20,
                          non_emitting_states=True)
# mapmatching
states, _ = matcher.match(path, unique=True)
# plot the result
mmviz.plot_map(map_con, matcher=matcher,
               show_labels=False, show_matching=True,  # show_graph=True,
               filename=None)

D:\python\3.12版本\Lib\site-packages\transbigdata\traj.py:530: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.
  data[Time] = pd.to_datetime(data[Time])
D:\python\3.12版本\Lib\site-packages\pyproj\crs\crs.py:141: FutureWarning: '+init=<authority>:<code>' syntax is deprecated. '<authority>:<code>' is the preferred initialization method. When making the change, be mindful of axis order changes: https://pyproj4.github.io/pyproj/stable/gotchas.html#axis-order-changes-in-proj-6
  in_crs_string = _prepare_from_proj_string(in_crs_string)
Searching closeby nodes with linear search, use an index and set max_dist





(<Figure size 2000x1179.53 with 1 Axes>, <Axes: xlabel='X', ylabel='Y'>)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#Obtain the path GeoDataFrame
pathdf = pd.DataFrame(matcher.path_pred_onlynodes,columns = ['u'])
pathdf['v'] = pathdf['u'].shift(-1)
pathdf = pathdf[-pathdf['v'].isnull()]
pathgdf = pd.merge(pathdf,edges_p.reset_index())
pathgdf = gpd.GeoDataFrame(pathgdf)
pathgdf.plot()
pathgdf.crs = {'init':'epsg:2416'}
pathgdf_4326 = pathgdf.to_crs(4326)
D:\python\3.12版本\Lib\site-packages\pyproj\crs\crs.py:141: FutureWarning: '+init=<authority>:<code>' syntax is deprecated. '<authority>:<code>' is the preferred initialization method. When making the change, be mindful of axis order changes: https://pyproj4.github.io/pyproj/stable/gotchas.html#axis-order-changes-in-proj-6
  in_crs_string = _prepare_from_proj_string(in_crs_string)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#Visualize with road network
import matplotlib.pyplot as plt

fig     = plt.figure(1,(8,8),dpi = 100)
ax      = plt.subplot(111)
plt.sca(ax)
fig.tight_layout(rect = (0.05,0.1,1,0.9))
#visualization bounds
bounds = pathgdf_4326.unary_union.bounds
gap = 0.003
bounds = [bounds[0]-gap,bounds[1]-gap,bounds[2]+gap,bounds[3]+gap]
#plot the matched path
pathgdf_4326.plot(ax = ax,zorder = 1)
#plot the road network geometry
tbd.clean_outofbounds(edges,bounds,col = ['lon','lat']).plot(ax = ax,color = '#111',lw = 0.05)
#plot the trajectory points
tmp_gdf.to_crs(4326).plot(ax = ax,color = 'red',markersize = 8,zorder = 12)

plt.axis('off')
plt.xlim(bounds[0],bounds[2])
plt.ylim(bounds[1],bounds[3])
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

!pip install plot_map -i https://mirrors.cloud.tencent.com/pypi/simple
Looking in indexes: https://mirrors.cloud.tencent.com/pypi/simple
Requirement already satisfied: plot_map in d:\python\3.12版本\lib\site-packages (0.3.7)
Requirement already satisfied: geopandas in d:\python\3.12版本\lib\site-packages (from plot_map) (0.14.3)
Requirement already satisfied: matplotlib in d:\python\3.12版本\lib\site-packages (from plot_map) (3.9.2)
Requirement already satisfied: fiona>=1.8.21 in d:\python\3.12版本\lib\site-packages (from geopandas->plot_map) (1.9.5)
Requirement already satisfied: packaging in d:\python\3.12版本\lib\site-packages (from geopandas->plot_map) (23.2)
Requirement already satisfied: pandas>=1.4.0 in d:\python\3.12版本\lib\site-packages (from geopandas->plot_map) (2.1.4)
Requirement already satisfied: pyproj>=3.3.0 in d:\python\3.12版本\lib\site-packages (from geopandas->plot_map) (3.6.1)
Requirement already satisfied: shapely>=1.8.0 in d:\python\3.12版本\lib\site-packages (from geopandas->plot_map) (2.0.3)
Requirement already satisfied: contourpy>=1.0.1 in d:\python\3.12版本\lib\site-packages (from matplotlib->plot_map) (1.2.0)
Requirement already satisfied: cycler>=0.10 in d:\python\3.12版本\lib\site-packages (from matplotlib->plot_map) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in d:\python\3.12版本\lib\site-packages (from matplotlib->plot_map) (4.47.2)
Requirement already satisfied: kiwisolver>=1.3.1 in d:\python\3.12版本\lib\site-packages (from matplotlib->plot_map) (1.4.5)
Requirement already satisfied: numpy>=1.23 in d:\python\3.12版本\lib\site-packages (from matplotlib->plot_map) (1.26.3)
Requirement already satisfied: pillow>=8 in d:\python\3.12版本\lib\site-packages (from matplotlib->plot_map) (10.2.0)
Requirement already satisfied: pyparsing>=2.3.1 in d:\python\3.12版本\lib\site-packages (from matplotlib->plot_map) (3.1.1)
Requirement already satisfied: python-dateutil>=2.7 in d:\python\3.12版本\lib\site-packages (from matplotlib->plot_map) (2.8.2)
Requirement already satisfied: attrs>=19.2.0 in d:\python\3.12版本\lib\site-packages (from fiona>=1.8.21->geopandas->plot_map) (23.2.0)
Requirement already satisfied: certifi in d:\python\3.12版本\lib\site-packages (from fiona>=1.8.21->geopandas->plot_map) (2023.11.17)
Requirement already satisfied: click~=8.0 in d:\python\3.12版本\lib\site-packages (from fiona>=1.8.21->geopandas->plot_map) (8.1.7)
Requirement already satisfied: click-plugins>=1.0 in d:\python\3.12版本\lib\site-packages (from fiona>=1.8.21->geopandas->plot_map) (1.1.1)
Requirement already satisfied: cligj>=0.5 in d:\python\3.12版本\lib\site-packages (from fiona>=1.8.21->geopandas->plot_map) (0.7.2)
Requirement already satisfied: six in d:\python\3.12版本\lib\site-packages (from fiona>=1.8.21->geopandas->plot_map) (1.16.0)
Requirement already satisfied: setuptools in d:\python\3.12版本\lib\site-packages (from fiona>=1.8.21->geopandas->plot_map) (69.0.3)
Requirement already satisfied: pytz>=2020.1 in d:\python\3.12版本\lib\site-packages (from pandas>=1.4.0->geopandas->plot_map) (2023.4)
Requirement already satisfied: tzdata>=2022.1 in d:\python\3.12版本\lib\site-packages (from pandas>=1.4.0->geopandas->plot_map) (2023.4)
Requirement already satisfied: colorama in d:\python\3.12版本\lib\site-packages (from click~=8.0->fiona>=1.8.21->geopandas->plot_map) (0.4.6)

间隔

import transbigdata as tbd
import pandas as pd
import geopandas as gpd
#read data
data = pd.read_csv(r'C:\Users\Redmi\Desktop\数据集\第6章-出租车 GPS 数据-时空大数据处理基础\第6章-出租车 GPS 数据-时空大数据处理基础\data\TaxiData-Sample.csv')
data.columns = ['VehicleNum','time','slon','slat','OpenStatus','Speed']
#encode geohash
data['geohash'] = tbd.geohash_encode(data['slon'],data['slat'],precision=6)
data['geohash']
#Aggregate
dataagg = data.groupby(['geohash'])['VehicleNum'].count().reset_index()
dataagg['lon_geohash'],dataagg['lat_geohash'] = tbd.geohash_decode(dataagg['geohash'])
dataagg['geometry'] = tbd.geohash_togrid(dataagg['geohash'])
dataagg = gpd.GeoDataFrame(dataagg)
dataagg

geohashVehicleNumlon_geohashlat_geohashgeometry
0w3uf3x1108.00109910.280457POLYGON ((107.99561 10.27771, 107.99561 10.283...
1webzz612113.87878422.469788POLYGON ((113.87329 22.46704, 113.87329 22.472...
2webzz721113.87878422.475281POLYGON ((113.87329 22.47253, 113.87329 22.478...
3webzzd1113.88977122.469788POLYGON ((113.88428 22.46704, 113.88428 22.472...
4webzzf2113.90075722.469788POLYGON ((113.89526 22.46704, 113.89526 22.472...
..................
2022ws1d9u1114.69177222.964172POLYGON ((114.68628 22.96143, 114.68628 22.966...
2023ws1ddh6114.70275922.964172POLYGON ((114.69727 22.96143, 114.69727 22.966...
2024ws1ddj2114.70275922.969666POLYGON ((114.69727 22.96692, 114.69727 22.972...
2025ws1ddm4114.71374522.969666POLYGON ((114.70825 22.96692, 114.70825 22.972...
2026ws1ddq7114.71374522.975159POLYGON ((114.70825 22.97241, 114.70825 22.977...

2027 rows × 5 columns

import matplotlib.pyplot as plt
import plot_map
bounds = [113.6,22.4,114.8,22.9]

fig =plt.figure(1,(8,8),dpi=480)
ax =plt.subplot(111)
plt.sca(ax)
tbd.plot_map(plt,bounds,zoom = 12,style = 4)
cax = plt.axes([0.05, 0.33, 0.02, 0.3])
plt.title('count')
plt.sca(ax)
dataagg.plot(ax = ax,column = 'VehicleNum',cax = cax,legend = True)
tbd.plotscale(ax,bounds = bounds,textsize = 6,compasssize = 1,accuracy = 2000,rect = [0.06,0.03],zorder = 10)
plt.axis('off')
plt.xlim(bounds[0],bounds[2])
plt.ylim(bounds[1],bounds[3])
plt.show()
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'

[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'
[WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Redmi\\Desktop\\出租车轨迹数据处理tileimg'

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值