【问题标题】:Iterate through address CSV to find if address is in an area遍历地址 CSV 以查找地址是否在某个区域中
【发布时间】:2019-09-09 21:33:06
【问题描述】:

感谢你们能给我的任何帮助。我很难知道从哪里开始这个项目。

我有一个 CSV 格式的地址列表。我需要创建一个用户可以在其中键入地址的 GUI,它会告诉他们它们是否可以在某个区域使用。如果我能把它变成一个可执行文件,那就太好了。

我有一个多边形,地址需要落在其中。我计划在 ARCGIS 上绘制所有地址,然后选择它们以创建该区域中的地址列表。地址有经纬度。

【问题讨论】:

  • 这个问题有很多要解开的内容,没有单独的答案就足够了。我建议把你的整体问题分解成各个组成部分,并在进行研究后提出有针对性的、有针对性的问题。我建议从查看pandas 开始,并努力熟悉该模块和数据框操作。舒适后,继续下一个目标。
  • 欢迎来到 SO。这不是讨论论坛或教程。请使用tour 并花时间阅读How to Ask 以及该页面上的其他链接。
  • 尝试将地址转换成经纬度坐标,然后检查,看看stackoverflow.com/questions/45180019/…。最好的。

标签: python user-interface gis


【解决方案1】:

这将给出从哪里开始的粗略想法:

import pandas as pd
import numpy as np
from shapely.geometry import Point
from shapely.geometry.polygon import LinearRing, Polygon
import tkinter as tk
from functools import partial
import matplotlib.pyplot as plt

#reading data
data = pd.read_csv('address.csv')
df = pd.DataFrame(data)

#initialization
lat = np.asarray(df['lat'])
long = np.asarray(df['long'])
poly_cords = [(2, 9), (2, 6), (5, 5), (6, 9)]
address = df['address']

#visualization
poly = Polygon(poly_cords)
x,y = poly.exterior.xy
plt.scatter(lat,long)
plt.plot(x, y, color='#6699cc', alpha=0.7,
    linewidth=3, solid_capstyle='round', zorder=2)
plt.show()

#function to produce proximity results
def call_result(label_result, n1, n2, poly_cords):
    lat = (n1.get())
    long = (n2.get())
    lat = float(lat)
    long = float(long)
    point = Point(lat,long)
    polygon = Polygon(poly_cords)
    if polygon.contains(point) == False:
        x = "We do not serve here"
    else:
        x = "we serve here"
    label_result.config(text="Result is %s" % x)
    return

#GUI
root = tk.Tk()
root.geometry('400x200+100+200')
root.title('Address Proximity')
number1 = tk.StringVar()
number2 = tk.StringVar()
labelTitle = tk.Label(root, text="Address Proximity").grid(row=0, column=2)
labelNum1 = tk.Label(root, text="Enter a lat").grid(row=1, column=0)
labelNum2 = tk.Label(root, text="Enter long").grid(row=2, column=0)
labelResult = tk.Label(root)
labelResult.grid(row=7, column=2)
entryNum1 = tk.Entry(root, textvariable=number1).grid(row=1, column=2)
entryNum2 = tk.Entry(root, textvariable=number2).grid(row=2, column=2)
call_result = partial(call_result, labelResult, number1, number2, polygon_cordinates)
buttonCal = tk.Button(root, text="Calculate", command=call_result).grid(row=3, column=0)
root.mainloop()

根据您的问题生成以纬度和经度为输入的 GUI。测试 (lat,long) 是否存在于多边形内。如果存在,它将显示“我们在这里服务”,否则它将显示“我们不在这里服务”。您可以根据需要更改多边形的坐标。 多边形看起来像:

【讨论】:

    猜你喜欢
    • 2017-01-29
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 2012-04-29
    • 2018-10-22
    • 2013-05-01
    • 2021-02-12
    • 1970-01-01
    相关资源
    最近更新 更多