Daha çox

Xətt şəkillərini rasterə çevirmək üçün Python istifadə edərək dəyər = hüceyrədəki xətlərin ümumi uzunluğu

Xətt şəkillərini rasterə çevirmək üçün Python istifadə edərək dəyər = hüceyrədəki xətlərin ümumi uzunluğu


Artıq oxşar sualı oxudum Xətt şəklini rasterə çevirin, dəyər = R-dən istifadə edərək hüceyrədəki xətlərin ümumi uzunluğu.
Və Python istifadə edərək funksiyanı həyata keçirmək istəyirəm.

===== Mənim cəhdim ====

  1. şəbəkə şəbəkəsini yaradın

    ### (1) 140 sıra x 187 sütun (1km x 1km ızgara) lon_x = np.linspace (xc1, xc2,187) lat_y = np.linspace (yc1, yc2,140) ### (2) boş sıra şəbəkə daxilində uzunluq məlumatlarını saxlamaq ş = (140 * 187,2) ızgaralar = np.zeros (140 * 187 * 2) .reshape (* sh) grids_road = np.zeros (140 * 187) ### (3) şəbəkələri və kd ağac quruluşunu yaradın xx = lon_x yy = lat_y k = 0 aralığında j üçün (0, yy.shape [0], 1): i üçün (0, xx.shape [0], 1): ızgaralar [k] = np.array ([xx [i], yy [j]]) k + = 1 #### istifadə etdiyim kd ağacı alqoritmi başlanğıc / bitiş ızgarasını tapmaq üçün tətbiq oluna bilər T = məkan.KDTree (ızgaralar)
  2. Bütün yol polinim => uzunluğu saxlayaraq ızgara => kəsişmə ilə döngə edin

    ### axtarış radiusunu təyin edin x_delta = (lon_x [24] - lon_x [23]) y_delta = (lat_y [24] - lat_y [23]) R = np.sqrt (x_delta ** 2 + y_delta ** 2) # ## yolu döndərin (polilini başlanğıc nöqtəsi x1, y1 və son nöqtəsi x2, y2 və uzunluğu olan pandalar dataframe kimi saxlayıram) i (0, len (yol), 1) aralığında i üçün: sta = sıralanmış (T .query_ball_point ([road.x1.iloc [i], road.y1.iloc [i]], r = R)) [0] end = sorted (T.query_ball_point ([road.x2.iloc [i], road .y2.iloc [i]], r = R)) [0] dt = (ızgaralar [son] [0] - ızgaralar [sta] [0]) / x_delta dx = dəyirmi ((ızgaralar [son] [0]) - ızgaralar [sta] [0]) / x_delta) dy = dəyirmi ((ızgaralar [son] [1] - ızgaralar [sta] [1]) / y_delta) # yolun forma şəkli xəttinə dəyişdirilməsi üçün düzgün istifadə olunur = [( road.x1.iloc [i], road.y1.iloc [i]), (road.x2.iloc [i], road.y2.iloc [i])] shapely_line = shapely.geometry.LineString (line) # yol yalnız bir cədvəldə uzanarsa, yol.distance.iloc [i] <1.0: index = sta grids_road [index] = road.distance.iloc [i] əgər road.distance.iloc [olduqda heç bir kəsişmə olmaz. i]> = 1.0: əgər (dx> 0) & (dy == 0): aralığında j üçün ( 0, int (dx), 1): k = 0 x1, x2, x3, x4 = ızgaralar [sta] [0] + j * x_delta, ızgaralar [sta] [0] + (j + 1) * x_delta,  ızgaralar [sta] [0] + (j + 1) * x_delta, ızgaralar [sta] [0] + j * x_delta y1, y2, y3, y4 = ızgaralar [sta] [1] + k * y_delta, ızgaralar [sta ] [1] + k * y_delta,  ızgaralar [sta] [1] + (k + 1) * y_delta, ızgaralar [sta] [1] + (k + 1) * y_delta, çoxbucaqlı = [(x1, y1) , (x2, y2), (x3, y3), (x4, y4), (x1, y1)] shapely_poly = shapely.geometry.Polygon (polygon) intersection = list (shapely_poly.intersection (shapely_line) .ordlar) ds1, ds2 = kəsişmə [0], kəsişmə [1] index = sta + j grids_road [index] = vincenty (ds1, ds2) .miles
Sonra tendensiyalara əsasən yolu fərqli səhnəyə təsnif edirəm (dx, dy bu xassəni təmsil edə bilər). Ancaq bu həll yolunun çox sərt olduğunu gördüm və hədəfi daha səmərəli kodla əldə etmək istəyirəm.

Bələdçiniz üçün arzu edirəm!

Şəkil bəzi şaquli və üfüqi yolları ehtiva edən erkən inkişafımı göstərir.
http://i4.tietuku.com/028bdd8ef1207557.png ">


Bəlkə də bu yazını faydalı tapacaqsınız: http://www.machinalis.com/blog/python-for-geospatial-data-processing/


Videoya baxın: تعلم بايثون 006 Python course التبديل للوضع المظلم في pycharm والتحكم في حجم خط الكود