小编Yor*_*ian的帖子

Windows上的GeoDjango:"找不到GDAL库"/"OSError:[WinError 126]无法找到指定的模块"

我一直在尝试设置我的Windows计算机,以便我可以使用PostGIS扩展的本地postgreSQL.有了这个安装,我希望能够在将它放入云之前在本地创建一个geodjango项目.我一直在使用SQLite DB在我的本地机器上使用Django一段时间,但由于下一个项目将部分基于基于坐标的数据,我想设置正确的环境.

导入说明:我已经安装了mini-conda以在单独的环境中运行.我工作的时候会激活这个环境"开发"

我试图在线跟踪大多数geodjango信息/教程,但无法使其工作.我做了什么(主要是遵循这个:https://docs.djangoproject.com/en/2.0/ref/contrib/gis/install/#windows):

  1. https://www.enterprisedb.com/downloads/postgres-postgresql-downloads下载并安装最新的(10.3)PostgreSQL设置
  2. 安装后我还安装了使用Application Stack Builder来安装PostGis
  3. 我从https://trac.osgeo.org/osgeo4w/安装了OSGeo4W
  4. 我已经创建了一个批处理脚本,如geodjango网站(https://docs.djangoproject.com/en/2.0/ref/contrib/gis/install/#windows)所述,并以管理员身份运行(除了部分,它设置了python的路径,因为python已经在那里,因为我已经使用python一段时间了)
  5. 我在psql shell中尝试了一些命令,我​​想我已经创建了一个名为geodjango的数据库,用户名:****并传递:****.
  6. 我不知道我是否给了geodjango用户所有priveleges,但我怀疑.

毕竟我创建了一个新的django项目,在settings.py中我添加了一些部分:

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.gis',
'nameOfMyApp',
]
Run Code Online (Sandbox Code Playgroud)

我在settings.py中也有这个:

DATABASES = {
'default': {
    'ENGINE': 'django.contrib.gis.db.backends.postgis',
    'NAME': 'geodjango',
    'USER': '****',
    'PASSWORD': '****',
    'HOST': 'localhost',
}
}

# FOR GEODJANGO
POSTGIS_VERSION = (2, 4, 3)
Run Code Online (Sandbox Code Playgroud)

当我尝试在django中设置数据库时,我运行(在右侧文件夹中):

python manage.py makemigrations
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

django.core.exceptions.ImproperlyConfigured: Could not find the GDAL library (tried "gdal202", "gdal201", "gdal20", "gdal111", "gdal110", …
Run Code Online (Sandbox Code Playgroud)

python django postgresql postgis geodjango

10
推荐指数
3
解决办法
6965
查看次数

删除时间序列中的峰值和阶跃等跳跃

我在现场有很多传感器可以测量水压。过去,这些传感器的高度已经改变了很多次,导致时间序列发生跳跃。由于这些时间序列是连续的,并且我有一个手动测量,所以从技术上来说,我应该能够消除跳跃(手动这很容易,但是测量太多,所以我需要在 python 中完成)。

我尝试过使用中值滤波器消除跳跃,但这并没有真正起作用。

我的代码:

    # filter out noise in signal (peaks)
    minimumPeak = 0.03 # filter peaks larger than 0.03m
    filtered_value = np.array(im.median_filter(data['value'], 5))
    noise = np.array((filtered_value-data['value']).abs() > minimumPeak)
    data.loc[noise, 'value'] = filtered_value[noise]
Run Code Online (Sandbox Code Playgroud)

数据是包含两列的 pandas 数据框:“日期时间”和“值”。

我也尝试过手动执行此操作,并使其在简单的情况下工作,但在其他情况下效果不佳。知道如何过滤掉跳跃吗?

下图显示了一个示例(黄色表示跳跃,红色表示手动测量(很可能该测量不是像本示例中那样在开始时进行))

具有跳跃的时间序列

python signal-processing

9
推荐指数
1
解决办法
2万
查看次数

docker 中的 GeoDjango 和 postgis 设置

我正在尝试创建一个 docker 设置,以便我可以轻松构建和部署 geodjango 应用程序(带有 postgis 后端)。我有以下文件夹结构:

|-- Dockerfile
|-- Pipfile
|-- Pipfile.lock
|-- README.md
|-- app
|   |-- manage.py
|   |-- app
|   `-- app_web
Run Code Online (Sandbox Code Playgroud)

在我设置 Django 的 Dockerfile 中,我有以下内容:

# Pull base image
FROM python:3.7

# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install dependencies
RUN pip install pipenv
COPY . /code
WORKDIR /code/
RUN pipenv install --system

# Setup GDAL
RUN apt-get update &&\
    apt-get install -y binutils libproj-dev gdal-bin python-gdal python3-gdal

# set …
Run Code Online (Sandbox Code Playgroud)

django postgresql postgis geodjango docker

7
推荐指数
1
解决办法
4029
查看次数

从python构建交互式地图

我正在尝试构建一个显示交互式地图的网页(占据页面的100%),其中我提供了包含信息的点或线.Plotly似乎是完美的,我真的很喜欢它的可视化,但它不支持内置的Open Street Map等地图,它使用Mapbox.我没有任何反对Mapbox的东西,但从我发现它可以免费获得一定数量的视图(当它使用OSM时).

简单地说:有一个简单的(作为开源和免费使用)方式使用python构建这样一个网页,显示信息的地图?

python openstreetmap mapbox plotly

6
推荐指数
1
解决办法
616
查看次数

OpenCV:使用solvePnP来确定单应性

在过去的几周里,我尝试学习纠正图像,并在这里的人们的帮助下,我已经设法更好地理解它.大约一个星期前,我设置了一个我想要纠正的测试示例(从上面查看图像).这个工作得很好(原:http://sitedezign.net/original.jpg和修正:http://sitedezign.net/rectified.jpg)与函数T = cv2.getPerspectiveTransform(UV_cp,XYZ_gcp)其中,T变为单应.

当我尝试使用真实世界的照片时,它失败了,因为真实世界的坐标在一个平面上并不完美(但是在空间的X,Y和Z坐标中测量的大约10个控制点).因此我决定使用solvePnP,并希望能够创建一个我可以使用的Homography.

我在测试示例中尝试了这个但没有得到我预期的结果:图像没有被纠正,我使用solvePnP计算的Homography不等于用getPerspectiveTransform计算的Homography.

我的代码:

# Set UV (image) and XYZ (real life)
UV_cp = np.array([[1300.0, 2544.0], # left down
                  [1607.0, 1000.0], # left up
                  [3681.0, 2516.0], # right down
                  [3320.0, 983.0]], np.float32) # right up

# Z is on 0 plane, so Z=0.0
XYZ_gcp = np.array([[0.0, 400.0, 0.0],
                    [0.0, 0.0, 0.0],
                    [300.0, 400.0, 0.0],
                    [300.0, 0.0, 0.0]], np.float32)

rvec, tvec = cv2.solvePnP(XYZ_gcp, UV_cp, K, D)
rotM_cam = cv2.Rodrigues(rvec)[0]

# calculate camera position …
Run Code Online (Sandbox Code Playgroud)

python opencv homography perspectivecamera

5
推荐指数
1
解决办法
3614
查看次数

带有彩色箭袋的色彩图

我正在绘制一张地图,上面有箭头。这些箭头代表风向、平均风速(每个方向)和发生情况(每个方向)。

方向由箭头的方向指示。箭头的长度表示该方向的平均风速。箭头的颜色表示该方向有风。

这一切都可以与下面的脚本配合使用:

windData = pd.read_csv(src+'.txt'), sep='\t', names=['lat', 'lon', 'wind_dir_start', 'wind_dir_end', 'total_num_data_points','num_data_points', 'avg_windspeed']).dropna()

# plot map
m = Basemap(llcrnrlon=minLon, llcrnrlat=minLat, urcrnrlon=maxLon, urcrnrlat=maxLat, resolution='i')
Left, Bottom = m(minLon, minLat)
Right, Top = m(maxLon, maxLat)

# get x y
x, y = m(windData['lon'], windData['lat'])

# angles
angleStart = -windData['wind_start']+90
angleStart[angleStart<0] = np.radians(angleStart[angleStart<0]+360.)

angleEnd = -windData['wind_end']+90
angleEnd[angleEnd<0] = np.radians(angleEnd[angleEnd<0]+360.)

angle = angleStart + math.radians(binSize/2.)

xux = np.cos(angle) * windData['avg_windspeed']
yuy = np.sin(angle) * windData['avg_windspeed']

# occurence
occurence = (windData['num_data_points']/windData['total_num_data_points'])

xi = np.linspace(minLon, maxLon, …
Run Code Online (Sandbox Code Playgroud)

python matplotlib matplotlib-basemap

5
推荐指数
2
解决办法
2万
查看次数

时间戳字符串(Unix时间)到datetime或pandas.Timestamp

从源代码我以JSON格式检索一些数据.我想将这些数据(及时测量)保存为文本文件.我反复想要使用相同的信号源并查看是否有新的测量值,如果是,我想将其添加到其他测量值.

我得到的数据如下:

{"xyz":[{"unixtime":"1458255600","time":"00:00","day":"18\/03","value":"11","paramlabel":"30-500 mHz","popupcorr":"550","iconnr":"7","paramname":"30-500 mHz"},{"unixtime":"1458256200","time":"00:10","day":"18\/03","value":"14","paramlabel":"30-500 mHz","popupcorr":"550","iconnr":"7","paramname":"30-500 mHz"},etc.]}
Run Code Online (Sandbox Code Playgroud)

我将这些数据加载到pandas DataFrame中,以便能够更轻松地使用它.但是,当我将其加载到数据框中时,所有列都被视为字符串.如何确保将unixtime列视为时间戳(以便我可以转换为日期时间)?

python datetime timestamp unix-timestamp pandas

4
推荐指数
1
解决办法
2468
查看次数

通过散点拟合样条曲线

我有两组数据,我想找到其中的相关性。尽管数据相当分散,但存在明显的关系。我目前使用 numpy polyfit (第 8 阶),但该行有一些“摆动”(特别是在开头和结尾),这是不合适的。其次,我认为线条开始处的拟合效果不是很好(曲线应该稍微陡一些。

如何通过这些数据点获得最适合的“样条线”?

使用 Polyfit 进行数据分散

我当前的代码:

# fit regression line
regressionLineOrder = 8
regressionLine = np.polyfit(data['x'], data['y'], regressionLineOrder)
p = np.poly1d(regressionLine)
Run Code Online (Sandbox Code Playgroud)

python numpy scipy non-linear-regression

3
推荐指数
1
解决办法
1万
查看次数

将向量切片作为参数传递给函数

我正在尝试学习 Rust 编程语言(目前主要使用 python)。Rust 网站提到的任务之一是构建系统,将员工和部门添加到充当“商店”的 HashMap 中。

在代码中,我尝试将其拆分为单独的函数,该函数解析用户输入并检查它是否是列出部门或添加员工的请求。接下来,我想要特定的函数来处理这些操作。

假设输入的形式为:

Add employee to department
Run Code Online (Sandbox Code Playgroud)

然后我希望初始解析函数检测到该操作是“添加”,我想将其传递给处理添加的函数“add”。

我已将字符串按空格分割为字符串向量。是否可以将该向量的切片 (["employee", "to", "department"]) 传递给函数 add?看来我只能通过完整的参考了。

我的代码:

fn main() {
    // this isnt working yet
    let mut user_input = String::new();
    let mut employee_db: HashMap<String,String> = HashMap::new();

    get_input(&mut user_input);
    delegate_input(&user_input[..], &mut employee_db);
    user_input = String::new();
}

fn get_input(input: &mut String) {
    println!("Which action do you want to perform?");
    io::stdin().read_line(input).expect("Failed to read input");
}

fn delegate_input(input: &str, storage: &mut HashMap<String,String>) {
    // Method is responsible for putting other …
Run Code Online (Sandbox Code Playgroud)

reference slice rust

3
推荐指数
1
解决办法
2813
查看次数

如何在循环中创建结构向量

我正在尝试学习 Rust,并利用代码的出现来做到这一点。我刚刚开始并决定拥有一个包含“Elf”结构的向量,其中每个结构都包含一个向量 calory_items。

我正在尝试从文本文件创建它并具有以下代码:

use std::io::{self, BufReader};
use std::path::Path;
use std::io::prelude::*;
use std::fs::File;

struct Elf {
    calory_items: Vec<i32>
}

fn parse_meal_list(source: &str) -> Vec<Elf> {
    let file = File::open(source).unwrap();
    let file = BufReader::new(file);
    
    let mut elves: Vec<Elf> = Vec::new();
    let mut elf = Elf {
        calory_items: Vec::new()
    };

    for line in file.lines() {
        let line = line.unwrap();
        if line.is_empty() {
            // create new Elf
            if elf.calory_items.len() > 0 {
                // in case there are two empty lines
                elves.push(elf); …
Run Code Online (Sandbox Code Playgroud)

struct vector ownership rust

1
推荐指数
1
解决办法
157
查看次数

获取字符串形式的 aiohttp 结果

我正在尝试使用 python 中的异步从网站获取数据。作为示例,我使用了此代码(在“更好的协程示例”下):https ://www.blog.pythonlibrary.org/2016/07/26/python-3-an-intro-to-asyncio/

现在这工作正常,但它将二进制块写入文件,而我不希望它在文件中。我想要直接得到结果数据。但我目前有一个协程对象列表,我无法从中获取数据。

代码:

# -*- coding: utf-8 -*-
import aiohttp
import asyncio
import async_timeout

async def fetch(session, url):
    with async_timeout.timeout(10):
        async with session.get(url) as response:
            return await response.text()


async def main(loop, urls):
    async with aiohttp.ClientSession(loop=loop) as session:
        tasks = [fetch(session, url) for url in urls]
        await asyncio.gather(*tasks)
        return tasks

# time normal way of retrieval
if __name__ == '__main__':
    urls = [a list of urls..]

    loop = asyncio.get_event_loop()
    details_async = loop.run_until_complete(main(loop, urls))
Run Code Online (Sandbox Code Playgroud)

谢谢

python python-asyncio aiohttp

0
推荐指数
1
解决办法
2185
查看次数

python async wait 无法返回元组

我想创建一个从网站异步下载的功能。我需要将下载结果连接到输入参数,以便我可以在下载后使用结果和参数。

我目前有以下内容:

async def download(session, url, var1, var2):
    with async_timeout.timeout(10):
        async with session.get(url) as response:
            return await (response.read(), url, var1, var2)

async def loop_download(loop, urls, var1s, var2s):
    async with aiohttp.ClientSession(loop=loop) as session:
        tasks = [download(session, url, var1, var2) for url, var1, var2 in zip(urls, var1s, var2s)]
        results = await asyncio.gather(*tasks)
        return results

loop = asyncio.get_event_loop()
results = loop.run_until_complete(loop_download(loop, urls, var1s, var2s))
Run Code Online (Sandbox Code Playgroud)

然而这会返回一个错误:

TypeError: object tuple can't be used in 'await' expression
Run Code Online (Sandbox Code Playgroud)

如何将一些输入数据(例如网址)加入到结果中,以便我可以使用它进行进一步分析?

python async-await python-asyncio aiohttp

0
推荐指数
1
解决办法
5171
查看次数