Я создал приложение Dash, используя Python, с интерактивной картой, используя Mapbox. Я хочу сгенерировать контуры просадки с интервалом 10 футов до просадки в 1 фут вокруг заданной широты/долготы, используя уравнение Тайса. Я только начал учиться программировать несколько месяцев назад, поэтому уверен, что есть простое решение, но я действительно борюсь с этим. Буду очень признателен за любую помощь в этом вопросе!
Пока моя карта отображает контуры просадки, но это не настоящие круги. В настоящее время код генерирует точки по кругу вокруг широты и долготы с интервалом 10 футов на расстоянии до 10 000 футов, вычисляет просадку в каждой точке с помощью Theis, затем соединяет точки с помощью прямых линий и отображает их на карте с помощью Scattermapbox.
Проблема в том, что я не хочу каждый раз указывать это точное расстояние для расчета просадки. Что мне действительно нужно, так это генерировать концентрические круги вокруг широты/долготы до контура просадки на 1 фут, независимо от того, насколько далеко этот круг просадки должен находиться от исходной точки широты/долготы. Мне посоветовали использовать matplotlib вместоplotly, но я не уверен, возможно ли это в Dash.
Выше раздела @app.callback я использую это :
# Contour lines
distance = np.append(np.arange(1,1000,10), np.append(np.arange(100, 2500, 100), np.arange(2500,10000,250)))
distance = np.append(distance, np.arange(10000,105000,1000)) # distance, feet
ci = 10 # default contour interval, feet
def generate_contour_points(lat, lon, distance, angles):
"""
Generate points in a circular pattern around a given lat/lon for the contour lines.
Parameters:
- lat: Latitude of the center point (decimal degrees).
- lon: Longitude of the center point (decimal degrees).
- distance: Array of radial distances for contour levels (in feet).
- angles: Array of angles (in degrees) to calculate the radial points.
Returns:
- List of points representing contour lines.
"""
contour_points = []
for i in distance: # Loop over each distance (for each contour level)
contour_level_points = [] # List to store points for each contour level
for angle in angles: # Loop over each angle
# Convert angle to radians
angle_rad = np.deg2rad(angle)
# Calculate the new x, y coordinates using polar to Cartesian conversion
x_offset = i * np.sin(angle_rad)
y_offset = i * np.cos(angle_rad)
# Convert to geographic coordinates (lat/lon) using distance
lat_offset = x_offset / 364000.0 # Approximate conversion from feet to degrees latitude
lon_offset = y_offset / (364000.0 * np.cos(np.radians(lat))) # Approximate conversion for longitude
contour_level_points.append([lat + lat_offset, lon + lon_offset])
contour_points.append(contour_level_points)
return contour_points
def calculate_drawdown_at_points(lat, lon, distance, angles, transmissivity, storativity, discharge, time):
"""
Calculate the drawdown at each point generated by generate_contour_points.
"""
contour_points = generate_contour_points(lat, lon, distance, angles)
drawdowns = []
for contour_level_points in contour_points:
drawdown_level = []
for point in contour_level_points:
r = np.sqrt((point[0] - lat)**2 + (point[1] - lon)**2) * 3963.0 # Convert to miles
drawdown = theis_con(transmissivity, storativity, r, discharge, time)
drawdown_level.append(drawdown)
drawdowns.append(drawdown_level)
return drawdowns, contour_points
def plot_contours_on_map(contour_points, drawdowns):
"""
Plot the contour lines on the map.
"""
contour_traces = []
for contour_level, drawdown_level in zip(contour_points, drawdowns):
contour_traces.append(go.Scattermapbox(
lat=[point[0] for point in contour_level],
lon=[point[1] for point in contour_level],
mode='lines',
line=dict(width=2, color='blue'),
name=f"Drawdown: {min(drawdown_level)} to {max(drawdown_level)} ft"
))
return contour_traces
В моем разделе @app.callback я сейчас использую это:
inc = 20
angles = np.arange(inc,360+inc, inc)
# Generate points for contour lines
distanceone = np.arange(10, 10000, 1000) # Example distance array (1 ft to 1000 ft)
angles = np.linspace(0, 360, 36) # Angles from 0° to 360° (every 10 degrees)
# Calculate drawdowns at the generated points
drawdowns, contour_points = calculate_drawdown_at_points(lat, lon, distanceone, angles, transmissivity, storativity, discharge, time=365)
# Plot contour lines on the map
contour_traces = plot_contours_on_map(contour_points, drawdowns)
Подробнее здесь: https://stackoverflow.com/questions/793 ... -display-o
Как отобразить контуры просадки, рассчитанные с помощью уравнения Тейса, для отображения на интерактивной карте в Dash с ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Ошибка при развертывании приложения Dash с помощью инструментов Dash и рендеринга
Anonymous » » в форуме Python - 0 Ответы
- 39 Просмотры
-
Последнее сообщение Anonymous
-