{ "info": { "author": "Roman Nurik", "author_email": "api dot roman dot public at gmail dot com (Roman Nurik)", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Topic :: Internet :: WWW/HTTP" ], "description": "GeoModel uses geohash-like objects called 'geocells' to provide a generalized\nsolution for indexing and querying geospatial data in App Engine. GeoModel is\noptimized for the basic real estate finder/store locator use case, but can be\nadapted for use with large datasets.\n\nUsing GeoModel, developers can instantly geo-contextualize datastore models by\nsimply inherting from the GeoModel class. Currently, entities can be associated\nwith a single geographic point and subsequently indexed and filtered by either\nconformance to a bounding box or by proximity (nearest-n) to a search center\npoint.\n\n\nChanges\n-------\n\nVersion 0.2.0 (2009-08-31)\n--------------------------\n\n - Using a single StringListProperty instead of one StringProperty for each\n cell. See http://code.google.com/p/geomodel/wiki/PreRevision8Migration how\n to migrate existing GeoModel entity indexes.\n - More unit tests.\n\n\nVersion 0.1.0 (2009-07-15)\n--------------------------\n\n - Initial PyPI release.\n\n\nCreating and saving GeoModel-derived entities\n---------------------------------------------\n\nTo use the GeoModel class, simply declare a new model class inheriting from the\ngeomodel.GeoModel class like so:\n\n >>> import google.appengine.ext.db\n >>> import geo.geomodel\n >>> class MyEntity(geo.geomodel.GeoModel):\n ... foo = google.appengine.ext.db.StringProperty()\n ... bar = google.appengine.ext.db.IntegerProperty()\n\nCurrently, only single-point entities are supported. Entities of the new\nMyEntity kind will have a location property of type db.GeoPt, which can be set\nas needed. Before put()'ing entities to the datastore, make sure to call\nupdate_location to synchronize the entity's underlying geocell indexing\nproperties:\n\n >>> some_entity = MyEntity(location=google.appengine.ext.db.GeoPt(37, -122),\n ... foo='Hello',\n ... bar=5)\n >>> some_entity.location = google.appengine.ext.db.GeoPt(38, -122)\n >>> some_entity.update_location()\n >>> some_entity.put()\n datastore_types.Key.from_path(u'MyEntity', 1, _app=u'test')\n\n\nQuerying your entities\n----------------------\n\nThere are currently two types of basic geospatial queries supported by the\nGeoModel library:\n\n - bounding box queries\n - proximity (nearest-n) queries\n\nTo perform a bounding box query, use the bounding_box_fetch class method like\nso:\n\n >>> import geo.geotypes\n >>> results = MyEntity.bounding_box_fetch(\n ... MyEntity.all().filter('bar >', 4), # Rich query!\n ... geo.geotypes.Box(39, -121, 37, -123),\n ... max_results=10)\n >>> results[0].foo\n u'Hello'\n\nBe careful not to request too many results or else you'll get a datastore or\nrequest timeout!\n\nTo perform a proximity query, use the proximity_fetch class method like so:\n\n >>> result = MyEntity.proximity_fetch(\n ... MyEntity.all().filter('bar <', 10), # Rich query!\n ... geo.geotypes.Point(39, -121), # Or db.GeoPt\n ... max_results=10,\n ... max_distance=160934) # Within 100 miles.\n >>> result[0].foo\n u'Hello'\n\nNote that for rich queries on multiple properties you'll need to set up the\nproper indexes in your index.yaml file. Testing your app on the development\nserver should populate that file with the required indexes. Also, GeoModel\ncurrently requires many internal properties on each entity (one for each\ngeocell resolution), which can lead to messy looking index.yaml files. That's\nsomething that will hopefully change in future versions.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://code.google.com/p/geomodel/", "keywords": "appengine gae geomodel google maps", "license": "Apache License 2.0", "maintainer": null, "maintainer_email": null, "name": "geomodel", "package_url": "https://pypi.org/project/geomodel/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/geomodel/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://code.google.com/p/geomodel/" }, "release_url": "https://pypi.org/project/geomodel/0.2.0/", "requires_dist": null, "requires_python": null, "summary": "Indexing and querying geospatial data in App Engine.", "version": "0.2.0" }, "last_serial": 792338, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "1b45bce9be0f44a7390df010b6a6ff2d", "sha256": "423645c009158891b4d02bdcbe0fbbaf3c875d209fc160bfcaf6df081c131d18" }, "downloads": -1, "filename": "geomodel-0.1.0-py2.5.egg", "has_sig": false, "md5_digest": "1b45bce9be0f44a7390df010b6a6ff2d", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 31314, "upload_time": "2009-07-15T04:12:31", "url": "https://files.pythonhosted.org/packages/83/04/e28d9c1f643db20442382eda2c5a47cd090cc84aa809c6174032a4fc6419/geomodel-0.1.0-py2.5.egg" }, { "comment_text": "", "digests": { "md5": "892788a0b5d9d38a6d2c3807dd1f0bc2", "sha256": "ee2a088d856b2020bdac0248d3147a68eba8256d18097e33a3d2ea36f7cfd033" }, "downloads": -1, "filename": "geomodel-0.1.0.tar.gz", "has_sig": false, "md5_digest": "892788a0b5d9d38a6d2c3807dd1f0bc2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16338, "upload_time": "2009-07-15T04:12:24", "url": "https://files.pythonhosted.org/packages/89/51/0e0206e20987977758a2234bf8ae933fcddd386b3b9eda6a1b885b2c7ac4/geomodel-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "70bec329b3f1216c6d68ed8f1842dc09", "sha256": "500bfb528001004d37a47ee48fab55fc604e9d2bedd62564809ba660a613381d" }, "downloads": -1, "filename": "geomodel-0.2.0-py2.5.egg", "has_sig": false, "md5_digest": "70bec329b3f1216c6d68ed8f1842dc09", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 38769, "upload_time": "2009-08-31T10:19:04", "url": "https://files.pythonhosted.org/packages/c9/9d/74a1f252b32829d76aebb840c187d6aa55252d04df1cd003ffc5ad4c9911/geomodel-0.2.0-py2.5.egg" }, { "comment_text": "", "digests": { "md5": "c362e57cb987d0b1c53383076b0aaa8f", "sha256": "61f99cdd8959e4cfc5981c6b8dc3f989acb5239d5876d73c4e7358bd824c2751" }, "downloads": -1, "filename": "geomodel-0.2.0.tar.gz", "has_sig": false, "md5_digest": "c362e57cb987d0b1c53383076b0aaa8f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16535, "upload_time": "2009-08-31T10:18:56", "url": "https://files.pythonhosted.org/packages/05/b1/d102c703f447a9fe96421c8c6865d3878348631ad6c54bb99445c15451ab/geomodel-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "70bec329b3f1216c6d68ed8f1842dc09", "sha256": "500bfb528001004d37a47ee48fab55fc604e9d2bedd62564809ba660a613381d" }, "downloads": -1, "filename": "geomodel-0.2.0-py2.5.egg", "has_sig": false, "md5_digest": "70bec329b3f1216c6d68ed8f1842dc09", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 38769, "upload_time": "2009-08-31T10:19:04", "url": "https://files.pythonhosted.org/packages/c9/9d/74a1f252b32829d76aebb840c187d6aa55252d04df1cd003ffc5ad4c9911/geomodel-0.2.0-py2.5.egg" }, { "comment_text": "", "digests": { "md5": "c362e57cb987d0b1c53383076b0aaa8f", "sha256": "61f99cdd8959e4cfc5981c6b8dc3f989acb5239d5876d73c4e7358bd824c2751" }, "downloads": -1, "filename": "geomodel-0.2.0.tar.gz", "has_sig": false, "md5_digest": "c362e57cb987d0b1c53383076b0aaa8f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16535, "upload_time": "2009-08-31T10:18:56", "url": "https://files.pythonhosted.org/packages/05/b1/d102c703f447a9fe96421c8c6865d3878348631ad6c54bb99445c15451ab/geomodel-0.2.0.tar.gz" } ] }